Java中enum的反序列化

时间:2013-07-21 13:01:30

标签: java enums singleton deserialization

Java中枚举类型的默认反序列化限制为readObjectreadObjectNoData抛出InvalidObjectException。因此,枚举类型非常适合实现没有任何缺陷的单例类(第77项, Effective Java,第2版,Bloch )。

  • 为什么第一方面,枚举类型实现了Serializable
  • 如何在实践中反序列化枚举引用?

1 个答案:

答案 0 :(得分:4)

枚举类型实现Serializable,因此您可以序列化包含枚举常量的对象。枚举常量以与任何其他目标相同的方式反序列化:使用ObjectInputStream.readObject()。枚举常量的编码方式与普通类的实例不同,因此ObjectInputStream.readObject()可以在不调用readObject方法的情况下反序列化它们。还有其他类使用特殊编码,其中包括StringClass。有关详细信息,请参阅documentation

如果您想自己实现可序列化的单例类,请查看readResolve方法。