如何解决可以扩展特征中的对象初始化变量
假设我具有以下特征和对象:
trait T {
val x: Int
println("In Trait",x)
}
object Obj extends T{
val y: Int = 10
val x: Int = y
def run() = {
println("In Obj",x)
}
}
Obj.run()
// (In Trait,0)
// (In Obj,10)
我是否可以使特征x
中的T
值与对象x
中的Obj
值相同?换句话说,我的预期输出应为:
// (In Trait,10)
// (In Obj,10)
假设y
的值仅在运行时已知。
解决方法
看到(In Trait,0)
的原因是在特征初始化期间以及对象分配值之前打印值。在这种情况下,您将获得默认值0
。如果它是一个对象,则会得到一个空指针异常。
对象初始化后,x
的值在对象和特征中都相同。
尝试早期的初始化程序
trait T {
val x: Int
println("In Trait",x)
}
object Obj extends {
val y: Int = 10
override val x: Int = y
} with T {
def run() = {
println("In Obj",x)
}
}
Obj.run()
// (In Trait,10)
// (In Obj,10)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。