【发布时间】:2016-01-13 12:59:55
【问题描述】:
我有一个可序列化的类。
public class Customer implements Externalizable {
private static final long serialVersionUID = 1L;
private String id;
private String name;
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName( String name) {
this.name = name;
}
@Override
public String toString() {
return "id : "+id+" name : "+name ;
}
@Override
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
this.setId((String) in.readObject());
this.setName((String) in.readObject());
}
@Override
public void writeExternal(ObjectOutput out) throws IOException {
System.out.println("Reached here");
out.writeObject(id);
out.writeObject(name);
}
}
我已将类的对象序列化为一个文件。现在我已将名称的数据类型从 String 更改为 List。因此,在反序列化时,我得到了一个类转换异常,因为它无法从 String 转换为 List。 每次对类进行一些更改时,我都在考虑更改类的版本,以便在 readExternal 中我可以明确地处理它。然而,虽然这个想法可能适用于简单的类,但在较大的复杂类的情况下会失败。谁能提供一个更简单的解决方案。
谢谢
【问题讨论】:
-
如果你有一个包含
String的序列化对象,你希望它在反序列化时如何自动转换为List? -
我没有,但可以通过更改 readExternal 方法来显式处理。在此处找到链接stackoverflow.com/questions/3678136/…。这适用于小型简单类,但我有一个包含许多内部类的复杂类。所以需要一个更简单可行的解决方案。
-
如果你经常换班,那是一种误解。如果它是一次性迁移,那么没有比明确处理它更好的解决方案了。
标签: java serialization deserialization externalizable