我正在阅读Joshua Blochs的“ Effective Java”第二版。目前我在第22项中,它描述了内部类和嵌套类,但是我不明白他这句话是什么意思:
且仅当匿名类出现在非静态上下文中时,它们才具有封闭实例。
有人可以给我一个代码示例,并解释它的确切作用吗?我知道ifInnerClass
是OuterClass
其封闭实例is的成员OuterClass
,但就匿名类而言,这对我来说听起来很奇怪。
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] 删除。
我来说两句