以下のコードは正常に動作していますが、合成法について 1 つ疑問があります。これらは個人データにアクセスするために生成されます。しかし、私はメンバークラスで使用される外部クラスのパブリックインスタンス変数を持っているので、インスタンス変数にアクセスするために合成メソッドを作成しました(クラスファイルにあるように!!)。
コード スニペットは次のとおりです。
public class TestInnerClass {
public int x = 10;
public static void main(String[] args) {
TestInnerClass test= new TestInnerClass();
A obj = test.new A();
obj.display();
}
class A {
void display() {
System.out.println(x);
}
}
}
クラスファイルは以下のように生成されます。 TestInnerClass$A として内部クラス A の場合:
import java.io.PrintStream;
class TestInnerClass$A {
TestInnerClass$A(TestInnerClass paramTestInnerClass) {
}
void display() {
System.out.println(this.this$0.x);
}
}
クラス ファイルが TestInnerClass 用に生成されます。
import java.io.PrintStream;
public class TestInnerClass {
public int x = 10;
public static void main(String[] args) {
TestInnerClass test = new TestInnerClass();
TestInnerClass tmp13_12 = test; tmp13_12.getClass(); A obj = new A();
obj.display();
}
class A {
A() {
}
void display() {
System.out.println(TestInnerClass.this.x);
}
}
}
だから私の疑問は次のとおりです。
1)。表示方法がクラスファイルで異なる定義を持っているのはなぜですか??
2)。TestInnerClass クラス ファイルのインスタンス変数がTestInnerClass.this.xとしてアクセスされるのはなぜですか。しかし、TestInnerClass$A のクラス ファイルでは、同じコードがthis.this$0.x ??と異なります。
3) JVM が合成メソッドをthis$0として作成したのに、インスタンス変数が publicであるのはなぜですか??