2011-08-08 25 views
0

我有一個實現了Serializable的類,它是一個更大的對象網格的一部分,它包含一個Constructor字段,但是當構造函數轉向序列化時,它會拋出NotSerializableException爲什麼不能在Java中序列化構造函數對象?

我猜我必須自己編寫邏輯,並且每次我反序列化包含對象時都要自己重新創建構造函數,但爲什麼Java的設計者想要創建這樣的麻煩呢?我意識到需要ClassLoader來確定類的身份,並且ClassLoader本身不會被序列化和反序列化,但是構造函數不應該記住用於創建它的字符串參數嗎?

+1

你是什麼意思的「構造對象」? Java中的構造函數是初始化類的「方法」,它不是一個對象,也不會影響序列化。所以你是什麼意思? –

+1

從構造函數序列化的角度來看,你一點也不清楚。對象是序列化的 - 構造器是成員,除非你的對象實際上包含對'java.lang.reflect.Constructor'的引用。請澄清。 –

+0

糟糕,我想我現在得到它,構造函數沒有實現Serializable,但爲什麼不能自動被認爲是暫態的,如果它不實現Serializable?這不合理嗎? –

回答

2

是的,因爲你意識到Constructor是不可序列化的。

您需要使Constructor字段瞬變並在需要時手動將其恢復。

是,Java的設計者可能所做的Constructor類序列化到類名和參數列表,但是這將打開一個巨大可以蠕蟲,基本上熬煮的事實,在任何給定的JVM可以有任意數量的具有該名稱的類,並且在反序列化這樣的對象時沒有知道使用哪一個的方法。

相關問題