没有要求拥有该serialVersionUID
领域。如果您不提供,Java 将根据您的类的字段和方法生成一个。
您可能要指定的原因serialVersionUID
是为了防止在更改方法时更改值,这不会影响序列化的二进制文件。考虑类:
public class Person implements Serializable {
private String name;
public String getName() {
return name;
}
}
没有serialVersionUID
指定。如果你运行serialver Person
它返回:
Person: static final long serialVersionUID = 3793453319058452486L;
现在您决定添加一个方法,但保持字段不变。
public class Person implements Serializable {
private String name;
public String getName() {
return name;
}
public Object foo() {
return "bar";
}
}
序列化的二进制文件仍然与旧版本完全兼容,但serialVersionUID
不同的是:
Person: static final long serialVersionUID = -6188734029437600310L;
使用不同的serialVersionUID
,反序列化将导致 serialVersionUID 不匹配错误。serialVersionUID
解决方法是通过将其设置为任何值(我设置它)来声明您自己的值1L
,并在字段发生更改时更改它。
另请参阅此相关问题“什么是 serialVersionUID,我为什么要使用它?” 进行更详细的讨论。