sr1*_*sr1 2 java enums serialization jms
我的团队通过 jms 向公司中的另一个团队提供服务。这涉及到作为更大对象的一部分传递给我们的枚举。他们很快就会改变枚举的定义——但是,我想先改变它,这样我就可以在改变前几天让我们的服务在生产中运行。更改将只涉及在最后添加另一个常量。我可以安全地做到这一点吗?
来自Java 对象序列化规范 6.0 版(重点是我的):
枚举常量的序列化形式仅由其名称组成;[...]。要序列化枚举常量,请
ObjectOutputStream
写入枚举常量的name
方法返回的值。要反序列化枚举常量,请ObjectInputStream
从流中读取常量名称;然后通过调用 java.lang.Enum.valueOf 方法获得反序列化的常量,将常量的枚举类型与接收到的常量名称一起作为参数传递。
这意味着:
enum
是向后兼容的enum
值是向后兼容的(与使用 的默认 JPAenum
持久性策略相反ordinal()
)enum
通常不向后兼容,因为删除的值可能已经用于序列化目的enum
值不向后兼容(见上文)