Я создаю экземпляр анонимного класса с помощью метода, который создает экземпляр другого анонимного класса, и из этого внутреннего анонимного класса я хочу вызвать метод, принадлежащий внешнему анонимному классу. Чтобы проиллюстрировать это, предположим, у меня есть этот интерфейс:
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
)
Мотивация :
Кто-то может спросить, почему я все равно хочу это сделать: я пишу какой-то генератор кода и хочу быть уверен, что код, который я генерирую, не является неоднозначным.