我们如何从Java中的匿名内部类获取对封闭类的引用?

时间:2020-03-05 18:44:06  来源:igfitidea点击:

我目前正在外部类中创建对此的显式引用,以便在匿名内部类中具有要引用的名称。有一个更好的方法吗?

解决方案

回答

使用EnclosingClass.this

回答

我最近才发现的。使用OuterClassName.this

class Outer {
    void foo() {
        new Thread() {
            public void run() {
                Outer.this.bar();
            }
        }.start();
    }
    void bar() {
        System.out.println("BAR!");
    }
}

已更新如果只需要对象本身(而不是调用成员),则可以使用Outer.this

回答

我们仍然可以使用Outer.class来获取外部类对象的类(它将返回与Outer.this.getClass()相同的Class对象,但是效率更高)

如果要访问封闭类中的静态变量,则可以使用Outer.name,其中name是静态字段或者方法。