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
は、囲んでいるクラスの非最終フィールドを参照しています。greeting
ジョブが実行されると、フィールドの値は、ジョブが作成されたときと同じように表示されますか?それとも、ジョブが実行されているときと同じように表示されますか? 私は答えを知っていると思いますが、それは興味深い質問だと思いました.