如何在java中访问匿名外部类的“this”引用

2022-09-04 02:24:22

我有以下问题。两种嵌套的匿名类型。我想在最内部的类内访问外部匿名类的“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

我得到的错误是

在作用域中无法访问 Outer 类型的封闭实例

我知道我可以像这样复制引用:

final Outer outerThisCopy = this;

就在实例化对象之前,然后引用此变量。真正的目标是,为了调试目的,我想比较对象内部访问的对象(即 )的哈希码和哈希码。我有一些很好的论据认为这两个对象是不同的(在我的情况下)。[上下文:论点是调用在“Outer”类中实现的 getter,该 getter 未在 “Inner” 类中隐藏,则返回不同的对象]InnerouterThisCopynew InnerOuter.this

任何想法如何访问封闭匿名类型的“this”引用?

谢谢。


答案 1

不能直接从内部类或其中的另一个匿名类访问匿名类的实例,因为匿名类没有名称。但是,您可以通过方法获取对外部类的引用:

new Outer()
{
    public Outer getOuter()
    {
        return this;
    }

    public void outerMethod()
    {
        new Inner()
        {
            public void innerMethod()
            {
                getOuter().hashCode();
            }
        };
    }
};

答案 2