枚举、单例和反序列化

8

枚举类型被认为是实现单例的最佳方式之一,其中一个原因是它隐式地继承了Serializable接口。

但是,枚举类型又如何防止单例的反序列化问题呢?


枚举是单例模式,但单例模式的反序列化存在哪些问题? - clinton
2
如果你将一个单例对象序列化,并且不关心它如何被反序列化,每次进行反序列化时你都会得到一个新的单例实例,这会破坏它的单例特性。 - JB Nizet
@JBNizet 感谢您的信息。我之前没有查过关于单例模式的问题。或者这个问题之前并没有引起我的注意。 - clinton
2个回答

7

1

将枚举用作单例模式的参数是无意义的。

如果枚举单例具有状态,那么在序列化/反序列化期间状态会丢失。

如果单例是无状态的,那么谁关心它的身份?


如果单例是无状态的,并且代码使用(例如)if (someVar == SomeSingleton.INSTANCE),那么您真正关心它的身份。 - JB Nizet
这个东西没有真实的实际用途。Jushua Bloc是虚构出来的。通常情况下,单例不应该被序列化,使用枚举来促进序列化是错误的。此外,单例模式只是一种实现策略,而不应该在接口中公开。 - irreputable

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接