Java 为什么要考虑方法名或为serialversionuid生成哈希

Java 为什么要考虑方法名或为serialversionuid生成哈希,java,serialization,serialversionuid,Java,Serialization,Serialversionuid,我有一节课 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 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;
}

默认设置是确保序列化对象仅在它们来自完全相同的类时才兼容。为此,将考虑类的许多属性:

在任何情况下,如果使用序列化,则应根据

对于按方法名称和签名排序的每个非私有方法:

The name of the method.
The modifiers of the method written as a 32-bit integer.
The descriptor of the method. 

在序列化过程中考虑公共方法的原因是它类似于一个契约。如果一个类建议了它所支持的公共方法,那么它不应该随着时间的推移而改变。如果这种情况发生变化,则必须更改该类的版本。

问得好,但不幸的是,情况就是这样。在我看来,即使是在1997年,当时也没有充分考虑到这一点。解决方案通常是提供您自己的
serialVersionUID。
谢谢EJB,似乎这不是故意的,我找不到任何意义。