class B(i:Int) {
var v = new M(i)
class M(i: Int) {
val x = i
println("Creating a new M")
println(s"x = $x")
}
}
val b = new B(1)
val c = new B(2)
b.v = c.v
如何使用c.v更改b中的變量v以及爲什麼我不能這樣做?更改類中的變量
class B(i:Int) {
var v = new M(i)
class M(i: Int) {
val x = i
println("Creating a new M")
println(s"x = $x")
}
}
val b = new B(1)
val c = new B(2)
b.v = c.v
如何使用c.v更改b中的變量v以及爲什麼我不能這樣做?更改類中的變量
之所以你不能做這樣的任務是因爲M
類是非靜態。不像java每個外部類實例都有它自己的內部類,所以b.v
和c.v
是的不同類型的實例因此你不能簡單地做賦值。
你可以做的是使用伴侶,對象
M
Scala的方式靜態object B {
class M(i: Int) {
val x = i
println("Creating a new M")
println(s"x = $x")
}
}
class B(i:Int) {
import B._
var v = new B.M(i)
}
使用
相同的實例
B
b.v = new b.M(2)
你可以找到scala-lang.org
在內部類的詳細信息http://danielwestheide.com/blog/2013/02/13/the-neophytes-guide-to-scala-part-13-path-dependent -types.html –