java - Java中枚举的反序列化

标签 java enums singleton deserialization

Java 中枚举类型的默认反序列化受到限制,因为 readObjectreadObjectNoData 抛出 InvalidObjectException。由于这个原因,枚举类型非常适合实现单例类,没有任何缺陷(条目 77,Effective Java,第二版,Bloch)。

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

最佳答案

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

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

关于java - Java中枚举的反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17772600/

相关文章:

Java 泛型集合,无法将列表添加到列表

java - 使用 hibernate 和 dbunit maven 插件创建内存数据库时出现问题

java - 访问其余 Web 服务时出现 SSLException

c# - 以函数作为参数的枚举

entity-framework-4 - 首先是 EF 代码中的枚举

asp.net-core - 何时使用以下 transient 、作用域和单例

java - 从 Elasticsearch 响应中删除元数据

java - 泛型和类 <?扩展 Enum<?>>,EnumSet.allOf(class) 与 class.getEnumConstants()

c++ - 如何初始化对在单独文件中声明的类的引用?

c++ - 正在为 C++11 之前的编译器返回线程安全的本地静态对象