2009-06-26 63 views
0

我有一類事情:在這種Java情況下需要哪些序列化?

public abstract class Thing { 
    // prevent instantiation outside package. Indeed, no Things will 
    // ever actually have a runtime class of Thing 
    Thing(){}; 

    public static Thing create() { 
     return new SpecialThing1(); 
    } 

    public static Thing createSpecial() { 
     return new SpecialThing2(); 
    } 

} 

final class SpecialThing1 extends Thing {/* etc etc */} 

final class SpecialThing2 extends Thing {/* etc etc */} 

基本上我想要的目標客戶最終使用是序列化,並在客戶端知道,他們將可序列化。那麼哪個類需要實現Serializable?哪些需要serialVersionUID?

回答

0

每個實例的派生類至少需要實現Serializable。如果字段應該被序列化,基類應該實現Serializable。您可能需要爲將來的更改設計串行格式(請參閱有效的Java,以便進行一些討論),

實現Serializable的所有類,無論是直接還是間接,都應該定義serialVersionUID。 (注意:外部包可以創建你的類的實例(通過反序列化 - 一個序列化代理可能是有序的)將創建方法移到基類之外可能是一個不錯的主意混淆)。

1

您只需要標記物品爲Serialiable,這將由SpecialThing1SpecialThing2繼承。您不需要已將添加到任何類的串行版本UID,但建議您這樣做;這樣你可以控制客戶端和服務器代碼之間的類的版本控制 - 參見相關問題here

相關問題