关于oop:如何从Java的匿名内部类中获取对封闭类的引用?

关于oop:如何从Java的匿名内部类中获取对封闭类的引用?

How do you get a reference to the enclosing class from an anonymous inner class in Java?

本问题已经有最佳答案,请猛点这里访问。

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


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

1
2
3
4
5
6
7
8
9
10
11
12
class Outer {
    void foo() {
        new Thread() {
            public void run() {
                Outer.this.bar();
            }
        }.start();
    }
    void bar() {
        System.out.println("BAR!");
    }
}

已更新如果只需要对象本身(而不是调用成员),则Outer.this是解决方法。


使用EnclosingClass.this


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

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


推荐阅读