枚举被认为是单例的最佳方式,原因之一是它隐式继承Serializable
。
但是枚举如何防止单例的反序列化问题?
序列化机制以一种特殊的、特定的方式处理它们。但是传统的单例可以通过定义一个readResolve()
返回唯一实例的方法来很好地反序列化。有关示例,请参见http://www.oodesign.com/singleton-pattern.html 。
将序列化作为将枚举用于单例的参数是无稽之谈。
如果枚举单例是有状态的,则在序列化/反序列化期间状态会丢失。
如果单例是无国籍的,谁在乎它的身份?