什么是Scala中的访问器和增变器方法?

时间:2015-04-17 19:52:57

标签: scala

这些显然是在scala中为构造函数中的任何参数自动生成的(我想这也暗示它们可以在其他地方手动添加)但这些东西是什么?

1 个答案:

答案 0 :(得分:5)

Accessor和mutator方法是具有特殊名称的常规方法。请看以下示例:

class A {
  var x: Int = _
}

与("编译器生成以下")相同:

class A {
  private[this] var internal: Int = _
  // this is the accessor
  def x: Int = internal 
  // this is the mutator
  def x_=(x: Int): Unit = internal = x
}

当您撰写或阅读x时,会发生以下情况:

val a: A = ???
println(a.x) // -> method x on A is called
a.x = 1 // syntactic sugar for a.x_=(1)

关于这一点的好处是,您可以在以后更改var以包括一致性检查:

class A {
  private[this] var _x: Int = _
  def x: Int = _x 
  def x_=(x: Int): Unit = {
    if (x < 0)
      throw new IllegalArgumentException("Must be non-negative")
    _x = x
  }
}

透明地用访问器/变换器替换变量的能力也称为uniform access principle