我可以在序列化对象的类中添加字段吗?

时间:2016-06-22 11:11:33

标签: java serialization

我有一个员工班:

class Employee implements Serializable{
    int empId;
    String empName;
    double salary;
}

此员工类的一个对象被序列化并存储在某个文件中,例如employee.ser

我想在现有员工类中再添加一个字段。现在我的员工类将是这样的

class Employee implements Serializable{
    int empId;
    String empName;
    double salary;
    String state="abc";
}

是否可以反序列化旧对象,使其具有状态的默认值?

如果有可能,那怎么办?

2 个答案:

答案 0 :(得分:1)

是。您可以添加或删除字段。请参阅Object Versioning chapter of the Object Serialization Specification。确保serialVersionUID保持相同的值。但是,应用默认值取决于您,因为在反序列化时不会运行构造函数或初始化代码。

答案 1 :(得分:0)

我认为这是一个老问题,但也许可以帮助其他人...

在您的类中,您可以实现方法'readObject'。

在反序列化对象时调用此方法。

例如:

private void readObject(java.io.ObjectInputStream in) throws IOException, ClassNotFoundException {
    in.defaultReadObject();
    if (newField == null) {
        newField = "abc";
    }
}