我有一個可序列化的類。當類字段的數據類型改變時處理反序列化
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);
}
}
我已經將該類的對象序列化爲一個文件。現在我已將名稱的數據類型從字符串更改爲列表。所以,雖然反序列化,我得到一個類轉換異常,因爲它無法從字符串轉換爲列表。 我正在考慮在每次對類進行某些更改時更改類的版本,以便在readExternal中可以明確處理它。然而,儘管這個想法可能適用於簡單的類,但如果遇到較大的複雜類,它將會失敗。任何人都可以請提供一個更簡單的解決方案。
謝謝
如果你有一個包含'String'的序列化對象,你如何期望它在反序列化時自動轉換爲'List'? –
我不這樣做,但可以通過更改readExternal方法明確處理它。鏈接在這裏找到http://stackoverflow.com/questions/3678136/managing-several-versions-of-serialized-java-objects。這將適用於小型簡單的類,但我有一個複雜的類與許多內部類。所以需要一個更簡單可行的解決方案。 – Poulami
如果你經常改變你的課程,那就有一種誤解。如果這是一次性遷移,那麼您將不會有比明確處理更好的解決方案。 –