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