ege*_*lev 12 java closures anonymous-types
我有以下问题.两个嵌套的匿名类型.我想访问最内层类中的外部匿名类的"this"引用.通常,如果在命名的外部类中有一个匿名嵌套类(让我们称之为"类外部"),他/她将在嵌套类中键入内容Outer.this.someMethod().如果它是匿名的,我如何引用外部类?示例代码:
public interface Outer {
void outerMethod();
}
public interface Inner {
void innerMethod();
}
...
public static void main(String[] args) {
...
new Outer() {
public void outerMethod() {
new Inner() {
public void innerMethod() {
Outer.this.hashCode(); // this does not work
} // innerMethod
}; // Inner
} // outerMethod
}; // Outer
...
} // main
Run Code Online (Sandbox Code Playgroud)
我得到的错误是
在范围内无法访问Outer类型的封闭实例
我知道我可以像这样复制引用:
final Outer outerThisCopy = this;
Run Code Online (Sandbox Code Playgroud)
在实例化Inner对象之前,然后引用此变量.真正的目标是我想比较hashCodes outerThisCopy和对象内部访问的new Inner对象(即Outer.this)以进行调试.我有一些很好的论据认为这两个对象是不同的(在我的例子中).[上下文:参数是调用在"外部"类中实现的getter,它在"Inner"类中没有阴影,返回不同的对象]
任何想法如何访问封闭匿名类型的"this"引用?
谢谢.
Eng*_*uad 18
您无法直接从内部类或其中的另一个匿名类访问匿名类的实例,因为匿名类没有名称.但是,您可以通过以下方法获取对外部类的引用:
new Outer()
{
public Outer getOuter()
{
return this;
}
public void outerMethod()
{
new Inner()
{
public void innerMethod()
{
getOuter().hashCode();
}
};
}
};
Run Code Online (Sandbox Code Playgroud)