public class Employee2 implements java.io.Serializable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我首先序列化了 Employee2 对象。然后在 Employee2 下又添加了一个字段,即年龄。现在反序列化 Employee2 并得到以下错误
java.io.InvalidClassException:Test.Employee2;本地类不兼容:流classdesc serialVersionUID = -342194960183674221,本地类serialVersionUID = -8890407383319808316
这是预期的,因为类的结构已被修改(因此 serialVersionUID 被修改,这是在序列化和反序列化时内部计算的)
现在,如果我在 Employee2 下声明以下字段并重复该场景,根据我的理解,我不应该得到 InvalidClassException,因为 serialVersionUID 在序列化和反序列化时是相同的,但我仍然得到 InvalidClassException 异常。为什么?如果序列化过程仍然使用在运行时计算的serialVersionUID,而不是在类下手动定义,那么声明它有什么用?
静态最终 Long serialVersionUID = 1L;