我使用一个带有实例化另一个匿名类方法的匿名类,并且我想从这个内部匿名类中调用属于外部匿名类的方法。为了说明这一点,假设我有这个接口:
interface ReturnsANumber {
int getIt();
}
然后,在我的代码的某个地方,我这样做:
ReturnsANumber v = new ReturnsANumber() {
int theNumber() {
return 119;
}
public int getIt() {
// In a modern version of Java, maybe I could do
// var a = this;
// and then call a.theNumber();
ReturnsANumber w = new ReturnsANumber() {
int theNumber() {
return 1;
}
public int getIt() {
return this.theNumber();
}
};
return w.getIt();
}
};
System.out.println("The number is " + v.getIt());
问题: 在最内层的方法getIt
中,我想调用外层匿名类的theNumber()
方法。如何在不使用Java 10 var特性(如代码提示)的情况下实现呢?
澄清: 理想情况下,外部匿名类不需要知道内部类想要调用它的theNumber
方法。想法是想出一些代码,让内部类能够明确地调用外部类上的任何一个方法。
换句话说,我该如何使这个代码显示:
The number is 119
(而不是显示The number is 1
)
动机: 有人可能会问为什么我要这样做:我正在编写某种代码生成器,并希望确保我生成的代码不含歧义。