如果一个类未
private static final long serialVersionUID在代码中显式定义a
,则它将自动生成,并且不能保证不同的机器将生成相同的id。看起来正是这样。同样,如果类在任何方面都不同(使用不同版本的类),则自动生成的
serialVersionUIDs也将不同。
从
Serializable界面的文档中:
如果可序列化的类未显式声明a
serialVersionUID,则序列化运行时将根据serialVersionUID该类的各个方面来计算该类的默认值,如Java™对象序列化规范中所述。但是,
强烈建议
所有可序列化的类显式声明serialVersionUID值,因为默认serialVersionUID计算对类详细信息高度敏感,而类详细信息可能会根据编译器的实现而有所不同,因此可能导致InvalidClassExceptions反序列化期间发生意外情况。因此,为了保证serialVersionUID不同Java编译器实现之间的值一致,可序列化的类必须声明一个显式serialVersionUID值。还强烈建议明确serialVersionUID声明private尽可能使用修饰符,因为此类声明仅适用于立即声明的类-serialVersionUID字段作为继承成员没有用。数组类不能声明一个explicitserialVersionUID,因此它们始终具有默认的计算值,但是serialVersionUID对于数组类,无需匹配值。
您应该
serialVersionUID在类定义中定义一个,例如:
class MyClass implements Serializable { private static final long serialVersionUID = 6529685098267757690L; ...


