在 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
创建作业时的字段值,还是执行时的值?我想我知道答案,但我认为这是一个有趣的问题,起初它让我和几个同事怀疑自己几分钟。