@DanielChapman很好地解释了serialVersionUID,但没有解决方案。解决方法是:
serialver在所有
旧 类上运行该程序。将这些
serialVersionUID值放在 当前
的类版本中。只要当前的类与旧版本在串行上兼容,就可以了。(注意以后的代码: 所有 类上都应 始终 有一个)
serialVersionUID
__
Serializable
如果新版本与序列 不 兼容,那么您需要对自定义
readObject实现做一些魔术(仅
writeObject当您尝试编写与旧代码兼容的 新
类数据时才需要自定义)。一般来说,添加或删除类字段不会使类序列不兼容。更改现有字段的类型通常会。
当然,即使新类 与
串行兼容,您仍可能需要自定义
readObject实现。如果您要填写从旧版本的类中保存的数据中缺少的任何新字段,则可能需要这样做(例如,您有一个新的List字段,要在加载旧的类数据时将其初始化为空列表)。



