gpt4 book ai didi

java - 可序列化的单例类

转载 作者:行者123 更新时间:2023-12-02 11:42:53 25 4
gpt4 key购买 nike

谁能解释一下这一段:[复制自Effective Java Joshua Bloch 第三版第2章第3项]

要使使用这两种方法之一的单例类(即保持构造函数私有(private)并导出公共(public)静态成员以提供对唯一实例的访问)可序列化,仅将实现序列化添加到其声明中是不够的。为了维持单例保证,请将所有实例字段声明为 transient 并提供 readResolve 方法。否则,每次反序列化序列化实例时,都会创建一个新实例,在我们的示例中,会导致虚假的猫王目击事件。为了防止这种情况发生,请将此 readResolve 方法添加到 Elvis 类中:

//  readResolve method  to  preserve    singleton   property 
private Object readResolve()
{
// Return the one true Elvis and let the garbage collector // take care of the Elvis impersonator.
return INSTANCE;
}

最佳答案

使用序列化/反序列化,我们可以创建许多对象,从而导致单例失败。所以为了避免这种情况我们必须实现 readResolve() 方法。在反序列化过程中,在提供反序列化对象之前,它将检查 readResolve() 方法。如果您覆盖并提供单例实例,则不会创建新对象。

关于java - 可序列化的单例类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48413704/

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