只需添加
private static final long serialVersionUID = 1L;//or some long
Docs每个序列化类形容它很好
的序列化运行联营 版本 号,称为的serialVersionUID, 这是反序列化 期间用于验证序列化对象的发件人和收件人 已加载 类对于 与 序列化兼容的那个对象。如果接收方为 加载了一个对象的类,该对象的 与对应的发件人类的 不同的serialVersionUID,然后反序列化将导致InvalidClassException的 。可序列化 类可以通过 声明名为 “的serialVersionUID”字段必须显式声明自己的 的serialVersionUID 静态的,最终,和long类型:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果 序列化类没有明确 声明serialVersionUID,则 串行化运行时将计算 默认serialVersionUID值 该类基于 该类的各个方面,如 Java(TM)Obj ect序列号 规范。然而,强烈 建议所有可序列化 类中明确声明 的serialVersionUID值,因为 默认的serialVersionUID计算 是类细节 高度敏感,可能取决于编译器 实现而不同,因此可能会导致意外InvalidClassExceptions 在反序列化过程中。因此,要保证 保证一致 serialVersionUID值跨越 不同的java编译器 的实现,可序列化类 必须声明明确的 serialVersionUID值。这也是 强烈建议明确 的serialVersionUID声明使用 private修饰符在可能的情况,因为 这些声明仅适用于 立即宣布 类 - serialVersionUID的域不 可用作继承的成员。
请参见
你如何产生7526472295622776147L? – user496949 2011-04-12 08:01:57
您只需选择一个随机(唯一)长整型值。在Eclipse中,你可以做*资料来源清理...-> Custome简介 - >缺少代码 - >添加序列版本ID * – aioobe 2011-04-12 08:02:43
感谢aioobe,最后一点是我需要知道的。 – 2011-12-27 19:47:39