在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
。这是可行的,因为匿名类允许引用外部作用域中的final变量。我不确定以下情况:
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
指的是封闭类的非final字段。当Job运行时,我会看到问候语字段的值是在创建Job时还是在执行时?我想我知道答案,但我觉得这是一个有趣的问题,一开始让我和几个同事犹豫了几分钟。