类构造函数/设置器

时间:2010-10-22 07:22:53

标签: scala

我是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中实现这一目标?

1 个答案:

答案 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