重複していると確信していますが、見つけることができませんでした。
このクラスを検討してください
class Test1(var param: Int)
Scala は getter と setter を生成し、param を private にします。
たとえば、javap を使用して表示できます。
public class Test1 {
private int param;
public int param();
public void param_$eq(int);
public Test(int);
}
明示的なゲッター/セッターを使用して脱糖バージョンを作成しようとしましたが、プライベート変数がゲッターと名前の衝突を起こしたのと同じように 100% 作成できませんでした。
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
のように明示的なゲッター/セッターを使用しながら、の例と同じバイトコードに到達する方法はありますTest2
か?