Java 中枚举类型的默认反序列化受到限制,因为 readObject
和 readObjectNoData
抛出 InvalidObjectException
。由于这个原因,枚举类型非常适合实现单例类,没有任何缺陷(条目 77,Effective Java,第二版,Bloch)。
- 为什么,一方面,枚举类型完全实现了
Serializable
? - 枚举引用在实践中应该如何反序列化?
最佳答案
枚举类型实现了Serializable
,因此您可以序列化包含枚举常量的对象。枚举常量的反序列化方式与任何其他对象相同:使用 ObjectInputStream.readObject()
。枚举常量的编码方式与普通类的实例不同,因此 ObjectInputStream.readObject()
可以在不调用它们的 readObject
方法的情况下反序列化它们。还有其他使用特殊编码的类,其中有 String
和 Class
。查看documentation了解更多详情。
如果您想自己实现可序列化的单例类,请查看readResolve
方法。
关于java - Java中枚举的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772600/