匿名内部クラスを関数に渡すと、次のように、そのクラスのメソッド内から現在のスコープ内の変数を参照できます。
class Caller {
private Object callerPrivate;
// ...
public void someMethod() {
final String callerLocal = "Eyes only";
ISomeInterface anon = new ISomeInterface() {
public void doSomethingInterfacy {
System.out.println(callerPrivate.toString());
System.out.println(callerLocal);
}
};
// this is some other object that puts ISomeInterfaces in a queue
// and makes them doSomethingInterfacy later
myCallManager.enqueue(anon);
}
}
さて、上記の someMethod が実行された後、Caller と小さな anons を持つキューは別々の道を進むことができます。私が理解している限り、JVM はすべての参照をまっすぐに保ち、これが常に機能するようにします。
しかし、たとえば、キューがシリアル化され、プログラムがシャットダウンされて再起動された後、キューが逆シリアル化され、その中のアイテムが実行され、Caller インスタンスがなくなって忘れ去られた場合はどうなるでしょうか?
また、anon クラス内の呼び出しが機能しなくなる方法で、周囲のオブジェクトと匿名の内部クラスを分離する他の方法はありますか?