我试图在Scala中覆盖val,因为:
trait T{
val str: String
}
sealed abstract class Test extends T{
val str: String = "str"
}
class Test1 extends Test{
val str = super.str + "test1" //super may not be used on value str
}
但这拒绝编译 . 为什么?我想使用抽象类的值本身覆盖抽象类中的值 . 这该怎么做?
在我的特定情况下,我 cannot 将其作为类参数传递 .
2 回答
Scala编译器不允许在
val
上使用super . 如果您不关心重新评估,可以使用def
代替 .如果你关心它避免重复初始化,你可以将它提取到一个方法:
您也可以使
str
非lazy
,但这很容易以这种方式结束初始化顺序问题 .