【发布时间】:2010-02-12 01:02:53
【问题描述】:
在 Java 中,我知道可以这样做:
public class Greeter {
public void greetEventually() {
final String greeting = "Hello!";
Job j = new Job() {
public void run() {
System.out.println(greeting);
}
};
j.schedule();
}
}
这将在将来的某个时间执行匿名Job。这是可行的,因为允许匿名类引用封闭范围内的最终变量。
我不确定的是以下情况:
public class Greeter {
private String greeting;
// ... Other methods that might mutate greeting ...
public void greetEventually() {
Job j = new Job() {
public void run() {
System.out.println(greeting);
}
};
j.schedule();
}
}
在这种情况下,我的匿名 Job 指的是封闭类的非最终字段。当作业运行时,我会看到创建作业时的 greeting 字段的值,还是执行时的值?我想我知道答案,但我认为这是一个有趣的问题,起初它让我和几个同事怀疑了几分钟。
【问题讨论】:
标签: java closures anonymous-types anonymous-class