2011-01-10 47 views
1

我有下面的類層次結構序列化,編譯和字節代碼生成

ParentInterface 

     | 
     v 
    ParentClass 

    / \ 
     v  v 

    SubClass1 SubClass2 

接口不擴展Serializable接口的類都實現Serializable接口爲好。所有的類都被編譯並打包成一個jar文件。

現在,我改變了ParentInterface,使它延伸了Serializable接口。在此之後,我只替換jar中的ParentInterface.class文件。

我有一些代碼,我試圖序列化一個實例SubClass1SubClass2。當試圖序列化時,我得到NotSerializableException

我假設,如果我再次編譯了所有的類並將它們替換到我的jar中,它就會起作用。如果我只更換ParentInterface怎麼了?

+3

不要認爲它會對重新編譯起作用 - 嘗試一下並找出答案。 – skaffman 2011-01-10 10:23:09

回答

1

可序列化類的所有子類本身都是可序列化的。

根據JavaDoc中的SubClass1和SubClass2應該是序列化的。除非他們有一些領域,是不是序列化。

仔細檢查SubClass1SubClass2內的字段的可串行性。

1

這可能幫助..

SubClass1SubClass2將定義可序列化

然而,由於建議特別注意同時包含在SubClass1SubClass2領域。注意JDK中描述的以下限制。

在反序列化過程中,不可序列化類的字段將使用該類的public或protected no-arg構造函數進行初始化。一個無參數的構造函數必須可以被序列化的子類訪問。序列化子類的字段將從流中恢復。

確保將「不可序列化」字段設置爲瞬態或按照適當的方式進行操作。