public static void main(String[] args) {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("hello world");
}
};
}
Run Code Online (Sandbox Code Playgroud)
这里,从静态上下文创建匿名类实例.所以它没有任何封闭的实例.
public class Foo {
public void bar() {
Runnable r = new Runnable() {
@Override
public void run() {
System.out.println("hello world");
}
};
}
private void baz() {
}
}
Run Code Online (Sandbox Code Playgroud)
这里,从实例方法创建匿名类实例.所以它有一个封闭的实例.该run()方法可以调用baz()或Foo.this.baz()从此封闭实例访问方法.
效果与非匿名内部类相同。从本质上讲,它的意思是:
class Outer {
void bar() {
System.out.println("seems you called bar()");
}
void foo() {
(new Runnable() {
void run() {
Outer.this.bar(); // this is valid
}
}).run();
}
static void sfoo() {
(new Runnable() {
void run() {
Outer.this.bar(); // this is *not* valid
}
}).run();
}
}
Run Code Online (Sandbox Code Playgroud)
因为您不能static为匿名类提供修饰符,所以该static属性始终从上下文继承。
| 归档时间: |
|
| 查看次数: |
451 次 |
| 最近记录: |