我是Scala的新手,来自基本的Java背景。我研究了如何实现类构造函数以及如何在setter中为该类的字段提供一些逻辑。
class SetterTest(private var _x: Int) {
def x: Int = _x
def x_=(x: Int) {
if (x < 0) this._x = x * (-1)
}
}
构造函数参数已分配给字段_x
,因此不使用setter。如果我想使用setter的逻辑怎么办?
object Test {
def main(args: Array[String]) {
val b = new SetterTest(-10)
println(b.x) // -10
b.x = -10
println(b.x) // 10
}
}
在Java中我可以使用构造函数中的setter来强制使用这个逻辑示例。
我如何在scala中实现这一目标?
答案 0 :(得分:6)
在Scala中,整个类主体构成主要构造函数。所以你可以这样做:
class SetterTest(private var _x: Int) {
x = _x // this will invoke your custom assignment operator during construction
def x: Int = _x
def x_=(x: Int) {
if (x < 0) this._x = x * (-1)
}
}
现在尝试一下:
scala> new SetterTest(-9).x
res14: Int = 9