class InitializationTest {
abstract class Base {
method()
def method(): Unit
}
class Subclass extends Base {
val obj = new Object
override def method(): Unit = {
println(obj) // null
// How to get the Object here?
}
}
@Test
def doTest(): Unit = {
new Subclass()
}
}
根据我的实验,println(obj)
表达式将输出 null
。
我的问题是,我是否需要在Subclass
的method
中访问obj。如果不将 obj 从 val
更改为 var
,我应该做什么,或者我不能做什么?
谢谢。
最佳答案
一种解决方案是将 obj
定义为 lazy val
。
另一种是使用早期定义:
class Subclass extends {
val obj = new Object
} with Base {
override def method(): Unit = {
println(obj) // not null!
}
}
可以找到这些解决方案(以及其他一些解决方案)here .
关于Scala,在对象初始化时访问成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39412817/