要从内部类 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));
}
}
运行此代码时,将打印 4 的值,因为这是 c2 的字段 x 的值。但是,我想更改标记为“THIS LINE”的行,使其返回外部类的 x(即 c1 的字段 x,值为 3)。如果外部类(即 c1 的类)是命名类 A,那么我可以替换
return x;
和
return A.this.x;
但是由于外部类也是匿名的,所以我没有名称可以使用。
问题:有没有办法修改标记为“THIS LINE”的行,使其引用 c1 的字段 x 而不是 c2 的,而不将匿名类更改为命名类?
我意识到这段代码真的很难看,这样使用匿名类也不是很好的编程风格,但是代码是由另一个程序生成的,这是实现生成器的最简单方法。