内部クラス B から外部クラス A のフィールド x にアクセスするには、「A.this.x」を使用できることに気付きました。しかし、外部クラスも匿名の場合はどうなるでしょうか? 例えば、
public class Main1 {
public static void main(String[] args) {
Comparable c1 = new Comparable(){
int x = 3;
public int compareTo(Object o) {
Comparable c2 = new Comparable(){
int x = 4;
public int compareTo(Object o) {
return x; // <-- THIS LINE
}
};
return c2.compareTo(o);
}
};
System.out.println(c1.compareTo(null));
}
}
このコードが実行されると、c2 のフィールド x の値である 4 の値が出力されます。ただし、「THIS LINE」とマークされた行を変更して、外部クラスの x (つまり、値 3 を持つ c1 のフィールド x) を返すようにしたいと考えています。外側のクラス (つまり、c1 のクラス) が名前付きクラス A である場合、次のように置き換えることができます。
return x;
と
return A.this.x;
しかし、外側のクラスも匿名であるため、使用する名前がありません。
質問: 匿名クラスを名前付きクラスに変更せずに、c2 ではなく c1 のフィールド x を参照するように、「THIS LINE」というラベルの付いた行を変更する方法はありますか?
このコードは本当に醜く、匿名クラスをこのように使用するのは適切なプログラミング スタイルではないことは理解していますが、コードは別のプログラムによって生成されており、これがジェネレーターを実装する最も簡単な方法です。