我有以下问题。两个嵌套的匿名类型。我想访问最内部类中外部匿名类的“this”引用。通常,如果一个人在命名的外部类中有匿名嵌套类(我们称之为“类 Outer”),他/她将在嵌套类中键入 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
我得到的错误是
No enclosing instance of the type Outer is accessible in scope
我知道我可以像这样复制引用:
final Outer outerThisCopy = this;
就在实例化Inner
对象之前引用这个变量。真正的目标是我想比较 outerThisCopy
的 hashCodes 和 new Inner
对象内部访问的对象(即 Outer.this
)用于调试目的。我有一些很好的论据认为这两个对象是不同的(在我的例子中)。
[上下文:论点是调用在“内部”类中未隐藏的“外部”类中实现的 getter 返回不同的对象]
关于如何访问封闭匿名类型的“this”引用有什么想法吗?
谢谢。
最佳答案
您不能直接从内部类或其中的另一个匿名类访问匿名类的实例,因为匿名类没有名称。但是,您可以通过方法获取对外部类的引用:
new Outer()
{
public Outer getOuter()
{
return this;
}
public void outerMethod()
{
new Inner()
{
public void innerMethod()
{
getOuter().hashCode();
}
};
}
};
关于java - 如何在java中访问匿名外部类的 "this"引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399839/