是否有一种语法可以从另一个匿名内部类中获取对匿名内部类的引用?

考虑这种情况:

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

尝试类似的东西很诱人:

 SomeClass$1.this 

但是你得到一个错误SomeClass$1 cannot be resolved to a type ; 尽管如果你让这段代码在没有这一行的情况下进行编译,它将(很可能)创建一个SomeClass$1.class

您可以使用非匿名类并使用限定类,也可以使用您提到的final局部变量技术。

参考

  • JLS 15.8.4对此有资格