包含实例的匿名类

阿舒尔

我正在阅读Joshua Blochs的“ Effective Java”第二版。目前我在第22项中,它描述了内部类和嵌套类,但是我不明白他这句话是什么意思:

且仅当匿名类出现在非静态上下文中时,它们才具有封闭实例。

有人可以给我一个代码示例,并解释它的确切作用吗?我知道ifInnerClassOuterClass其封闭实例is的成员OuterClass,但就匿名类而言,这对我来说听起来很奇怪。

尼伯(JB Nizet)
public static void main(String[] args) {
    Runnable r = new Runnable() {
        @Override
        public void run() {
            System.out.println("hello world");
        }
    };
}

在这里,从静态上下文创建一个匿名类实例。因此它没有任何封闭的实例。

public class Foo {
    public void bar() {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                System.out.println("hello world");
            }
        };
    }

    private void baz() {
    }
}

在这里,一个匿名类实例是通过实例方法创建的。因此,它具有一个封闭的实例。run()方法可以调用baz()Foo.this.baz(),从而从该封闭实例访问一个方法。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章