Design patterns 序列化一个成员都是瞬态的类有什么意义?

Design patterns 序列化一个成员都是瞬态的类有什么意义?,design-patterns,singleton,Design Patterns,Singleton,我读了一些关于Singleton设计模式的内容,结果证明实现可序列化Singleton的一个好方法是使用readResolve方法,该方法返回真实实例和声明的所有成员transient。我有几个问题: 如果反序列化后仍然得到真实的实例,而不是序列化的实例,那么序列化不是毫无用处吗?反正你会失去一切的 如果我错了1。如上所述,声明所有成员是否仍然会丢失所有成员的值?那么,序列化不是毫无用处吗 如果所有成员数据都丢失,是否存在需要序列化单例的情况 谢谢。这取决于你的单身汉是什么。考虑这个例子: pu

我读了一些关于Singleton设计模式的内容,结果证明实现可序列化Singleton的一个好方法是使用
readResolve
方法,该方法返回真实实例和声明的所有成员
transient
。我有几个问题:

  • 如果反序列化后仍然得到真实的实例,而不是序列化的实例,那么序列化不是毫无用处吗?反正你会失去一切的
  • 如果我错了1。如上所述,声明所有成员是否仍然会丢失所有成员的值?那么,序列化不是毫无用处吗
  • 如果所有成员数据都丢失,是否存在需要序列化单例的情况

  • 谢谢。

    这取决于你的单身汉是什么。考虑这个例子:

    public class Apple implements Serializable {
        private List<Worm> worms = Collections.emptyList();
    
        ...
    }
    
    公共类Apple实现了可序列化{ 私有列表蠕虫=Collections.emptyList(); ... }
    Collections.emptyList()
    是一个单例。但是当你序列化一个苹果时,序列化它是有意义的。反序列化apple时,您希望返回单例空列表,而不是此单例的新副本。

    重点不是序列化状态并反序列化它。重点是,在序列化和反序列化过程中,您可能最终会创建多个您希望成为单例的类实例。所以,如何阻止这种情况的发生是你们试图解决的问题的焦点。而解决办法正如你所提到的-

    readResolve方法,该方法返回真实实例和所有成员 声明的瞬态*

    因此,您不是在保存和检索状态。但是,在序列化和反序列化期间,您正在阻止singleton拥有多个实例,这在singleton上下文中更为重要。希望这有帮助