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

标签 java closures anonymous-types

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

相关文章:

java - 初始化与方法一起使用的对象数组

javascript - JS 将参数作为变量传递给匿名函数并稍后调用 -> 参数值问题

javascript - 是否有可能访问函数的闭包?

c# - 从匿名数组访问不同的项目类型

c# - 使用匿名对象初始化字典

具有名称的元组的 C# 解决方法

java - 如何将行数据从 1 个 JTable 移动到另一个 JTable?

java - 安卓工作室错误 : "Invoke-customs are only supported starting with Android O"

java - 从 HTML 调用 REST Web 服务

reference - 当函数需要引用闭包参数时,如何将函数用作闭包?