序列化时我有一个课
public class Name implements Serializable {
private final String firstName;
private final String lastName;
public Name(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
但是在反序列化时我有一个额外的方法(下面提到),它不会以任何方式影响对象状态,序列化就是存储对象状态,那么为什么额外的方法在serialversionuid的哈希生成中有贡献。在当前场景中,它将因InvalidClassException而失败。但是这个额外的方法不会改变对象状态。
public String getFullName() {
return firstName + " " + lastName;
}
答案 0 :(得分:2)
默认设置是确保序列化对象只有来自完全相同的类才兼容。为此,我们考虑了该类的许多属性:https://docs.oracle.com/javase/6/docs/platform/serialization/spec/class.html#4100
在任何情况下,如果您使用序列化,则应定义自己的ID。
答案 1 :(得分:0)
对于按方法名称和签名排序的每个非私有方法:
The name of the method. The modifiers of the method written as a 32-bit integer. The descriptor of the method.
在序列化中考虑公共方法的原因是因为它就像合同。如果一个类已经建议它支持的公共方法,它不应该随时间变化。如果更改,则必须更改类的版本。