Quand je passe une classe interne anonyme en fonction, je peux faire référence à des variables dans la portée actuelle à partir d'une méthode de cette classe, comme ceci:Y at-il un moyen pour que les classes internes anonymes de Java "perdent" leur portée?
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);
}
}
Maintenant, après someMethod a été exécuté ci-dessus, la L'appelant et la file d'attente avec les petits anons peuvent se séparer, et, autant que je sache, la JVM garde toutes les références droites pour que cela fonctionne toujours. Mais que se passe-t-il si, par exemple, la file d'attente est sérialisée, le programme est arrêté et redémarré, après quoi la file d'attente est désérialisée et les éléments sont exécutés, l'instance de l'appelant étant oubliée?
Y a-t-il d'autres moyens pour que l'objet environnant et la classe interne anonyme se séparent d'une manière telle que les appels à l'intérieur de la classe anon ne fonctionneront plus?