gpt4 book ai didi

java - 有没有办法让 Java 中的匿名内部类达到 "lose"它们的范围?

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:19:02 25 4
gpt4 key购买 nike

当我将匿名内部类传递给函数时,我可以从该类的方法中引用当前作用域中的变量,如下所示:

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 运行之后,调用者和带有小匿名者的队列可以分开,而且,据我所知,JVM 保持所有引用直接,因此它始终有效。

但是,如果,例如,队列被序列化,程序关闭并重新启动,然后队列被反序列化,其中的项目将运行,而调用者实例早已消失并被遗忘,该怎么办?

是否有其他方法可以将周围对象和匿名内部类分开,从而使匿名类内部的调用不再起作用?

最佳答案

不要序列化本地类,因为 (a) 文档是这样说的,并且 (b) 序列表示不稳定(它们没有一个稳定的开始名称)。

如果您不希望您的实例保留外部 this 和使用的最终局部变量的字段,请使用(静态)嵌套类或外部类。对于 (Java) 序列化,您可以使用 writeReplace 来序列化串行代理对象。

关于java - 有没有办法让 Java 中的匿名内部类达到 "lose"它们的范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673021/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com