Причина, по которой SomeInterface.this
не компилируется, заключается в том, что включающий класс не SomeInterface
, а скорее какой-то анонимный тип.
Вы не можете использовать квалифицированный this
с анонимным типом. Вот почему они анонимны ; вы не можете ссылаться на них по имени, и квалифицированный this
работает, явно называя вмещающий тип.
Соблазнительно попробовать что-то вроде:
SomeClass$1.this
Но тогда вы получите ошибку SomeClass$1 cannot be resolved to a type
; несмотря на то, что если вы позволите этому коду скомпилироваться без этой строки, он (по всей вероятности) создаст SomeClass$1.class
.
Вы можете либо использовать неанонимный класс и использовать квалифицированный this
, либо использовать технику локальной переменной final
, которую вы упомянули.
Ссылки