Рассмотрите этот случай:
public class SomeClass {
public void someMethod() {
new SomeInterface() {
public void someOtherMethod() {
new SomeOtherInterface() {
new someThirdMethod() {
//My question is about code located here.
}
};
}
};
}
}
Существует ли синтаксис для ссылки на экземпляр анонимного внутреннего класса, представленного SomeInterface в прокомментированном коде? Для SomeClass можно сделать SomeClass.this
Существует ли эквивалент для получения реализации SomeInterface?
В противном случае, конечно, можно просто определить заключительную локальную переменную в реализации SomeInterface и сослаться на нее, но я просто задавался вопросом, существует ли на самом деле прямая поддержка языка для ссылки на экземпляр.
Причина, по которой SomeInterface.this
не компилируется, заключается в том, что включающий класс не SomeInterface
, а скорее какой-то анонимный тип.
Вы не можете использовать квалифицированный this
с анонимным типом. Вот почему они анонимные ; вы не можете ссылаться на них по имени, а квалифицированный this
работает, явно называя включающий тип.
Заманчиво попробовать что-нибудь вроде:
SomeClass$1.this
Но тогда вы получите сообщение об ошибке SomeClass $ 1 не может быть преобразован в тип
; несмотря на то, что если вы позволите этому коду компилироваться без этой строки, он (по всей вероятности) создаст SomeClass $ 1.class
.
Вы можете либо использовать неанонимный класс и использовать квалифицированный this
, либо вы можете использовать упомянутый вами метод локальных переменных final
.