我确定它是重复的,但我找不到它。
考虑这个类
class Test1(var param: Int)
Scala 生成一个 getter 和一个 setter,并将参数设为私有。
它可以使用 javap 显示,例如:
public class Test1 {
private int param;
public int param();
public void param_$eq(int);
public Test(int);
}
我试图用显式的 getter / setter 编写它的脱糖版本,但不能 100% 这样做,因为私有 var 与 getter 发生命名冲突。
class Test2(private[this] var param:Int) {
def param:Int = this.param
def param_= (param:Int) {this.param = param}
}
这是错误:
ambiguous reference to overloaded definition,
both method param in class Test2 of type => Int
and variable param in class Test2 of type Int
match expected type Int
def param:Int = param
^
这当然有效(将私人成员重命名为_param
)
class Test3(private[this] var _param:Int) {
def param:Int = this._param
def param_= (param:Int) {this._param = param}
}
但是当然会生成这个略有不同的字节码(因为我们必须重命名param
为_param
):
public class Test3 {
private int _param;
public int param();
public void param_$eq(int);
public Test3(int);
}
Test1
在使用显式 getter / setter 时,有什么方法可以达到与示例相同的字节码Test2
?