我想在构造函数中覆盖Trait中的一个可变变量.但它会抱怨"在Int类型的特征A中覆盖变量a;变量a不能覆盖可变变量".为什么scala不允许我这样做?对此最好的做法是什么?谢谢
trait A{
var a:Int = _
}
class B(override var a:Int) extends A
Run Code Online (Sandbox Code Playgroud)
Mal*_*off 13
你不能覆盖它(原因是现在没有向我揭示,除了,无论如何都可以修改变量,所以为什么要覆盖它们),但你可以保留声明的变量uninitialised并将后者委托给B:
trait A {
var a: Int
}
class B(var a: Int) extends A
Run Code Online (Sandbox Code Playgroud)
覆盖仅适用于方法.覆盖变量没有意义.如果用另一个相同类型的变量覆盖变量会有什么变化?如果有的话,价值和那个只能随时设置,因为它是一个变量:
trait A {
var a: Int = _
}
class B (a0: Int) extends A {
a = a0
}
Run Code Online (Sandbox Code Playgroud)
但这可能不是你想要的.你也可以留下getter和setter摘要:
trait A {
def a: Int
def a_=(value: Int): Unit
}
class B(var a: Int)
Run Code Online (Sandbox Code Playgroud)
这相当于
trait A {
var a: Int
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8981 次 |
| 最近记录: |