我有一个员工班:
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";
}
是否可以反序列化旧对象,使其具有状态的默认值?
如果有可能,那怎么办?
答案 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";
}
}