【问题标题】:Deserialization of enum in JavaJava中枚举的反序列化
【发布时间】:2013-07-21 13:01:29
【问题描述】:

Java 中枚举类型的默认反序列化被限制为 readObjectreadObjectNoData 抛出 InvalidObjectException。由于这个原因,枚举类型非常适合实现没有任何缺陷的单例类(Item 77,Effective Java,2nd Edition,Bloch)。

  • 为什么枚举类型首先实现Serializable
  • 在实践中应该如何反序列化枚举引用?

【问题讨论】:

    标签: java enums singleton deserialization


    【解决方案1】:

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

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

    【讨论】:

    • 嗯,第 1 点在这里有答案。包含枚举引用的类不应该只是在序列化时崩溃。我尝试了默认反序列化,它很简单!那为什么,有很多帖子讨论如何有效地反序列化枚举(只是为了迎合代码重构)?
    猜你喜欢
    • 2014-08-10
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 2019-05-31
    • 2015-07-26
    相关资源
    最近更新 更多