public class MyObj implements Serializable {
private transient Map<String, Object> myHash = new HashMap<String, Object>();
...
}
有什麼辦法,以確保當上面的類的對象進行反序列化的成員myHash將被設置爲一個新的空地圖,而不是被設置爲null?反序列化對象的瞬態成員的非空默認在Java中
public class MyObj implements Serializable {
private transient Map<String, Object> myHash = new HashMap<String, Object>();
...
}
有什麼辦法,以確保當上面的類的對象進行反序列化的成員myHash將被設置爲一個新的空地圖,而不是被設置爲null?反序列化對象的瞬態成員的非空默認在Java中
public class MyObj implements Serializable {
private transient Map<String, Object> myHash = new HashMap<String, Object>();
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
myHash = new HashMap<String, Object>();
}
}
您可以實現自己的自定義readIn
方法並明確創建一個新的Map<T>
作爲Java Serializable documentation解釋。那篇文章應該描述如何去做你正在尋找的東西;檢查名爲的部分自定義默認協議。
怎麼樣加入這樣的readObject方法:
public class MyObj implements Serializable {
private transient Map<String, Object> myHash = new HashMap<String, Object>();
...
private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException {
in.defaultReadObject();
myHash = new HashMap<String, Object>();
}
}
這應該排序你出去。
它是不是已經設置了默認值?這是單身課嗎? – fmucar 2011-01-27 00:07:52
@fatih反序列化不會調用您的構造函數或字段初始值設定項。這是一個重要的教訓,它可以節省您幾個小時的麻煩,調試似乎很好的代碼,突然停止工作。 – biziclop 2011-01-27 00:19:19
它不會調用任何函數或構造函數,但它並沒有執行類範圍inited對象inits。每天學習新事物。謝謝。 – fmucar 2011-01-27 09:38:35