一个小问题,希望有一个小答案:
我有一个var
在我的班级中,每当设置时都需要触发某种更新。我知道一个var
隐式地获取两个方法,一个 getter 和一个 setter。是否可以以某种方式重写 setter 方法以确保触发更新,而不需要递归?我是说
def a_=(x: Any) = { a = x; update }
可能会是无限递归,对吗?
The var
只在类外设置并且只在类内读取,也许这有帮助。
感谢收听。
您的代码永远不会是无限递归,因为它无法编译。由于编译器隐式创建了 Getter 和 Setter,因此您不能两次创建此类方法。我不知道编译器是否有原因不检查 Getter 或 Setter 是否存在,只有在不存在此类方法时才创建此类方法。
您可以通过重命名私有变量来避免此问题:
class X(private var _i: Int) {
def i = _i
def i_=(i: Int) {
println(i)
_i = i
}
}
这些方法与编译器生成的方法具有相同的签名。
If the update
只有当您可以在伴生对象中执行此操作时,才可以调用方法:
object X {
def apply(i: Int) = {
update
new X(i)
}
}
class X(i: Int)
你有什么理由不喜欢不可变的对象吗?如果不是,可以复制旧值,同时设置一个新值:
case class X(i: Int, j: Int)
val x1 = X(3, 6)
val x2 = x1.copy(i = 1) // x2 = X(1,6)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)