Существует ли синтаксис для получения ссылки на анонимный внутренний класс от дальнейшего анонимного внутреннего класса?

Рассмотрите этот случай:

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 и сослаться на нее, но я просто задавался вопросом, существует ли на самом деле прямая поддержка языка для ссылки на экземпляр.

5
задан Yishai 28 May 2010 в 15:35
поделиться

1 ответ

Причина, по которой SomeInterface.this не компилируется, заключается в том, что включающий класс не SomeInterface , а скорее какой-то анонимный тип.

Вы не можете использовать квалифицированный this с анонимным типом. Вот почему они анонимные ; вы не можете ссылаться на них по имени, а квалифицированный this работает, явно называя включающий тип.

Заманчиво попробовать что-нибудь вроде:

SomeClass$1.this

Но тогда вы получите сообщение об ошибке SomeClass $ 1 не может быть преобразован в тип ; несмотря на то, что если вы позволите этому коду компилироваться без этой строки, он (по всей вероятности) создаст SomeClass $ 1.class .

Вы можете либо использовать неанонимный класс и использовать квалифицированный this , либо вы можете использовать упомянутый вами метод локальных переменных final .

Ссылки

5
ответ дан 14 December 2019 в 19:03
поделиться
Другие вопросы по тегам:

Похожие вопросы: