2011-11-24 70 views
3

通常這個問題來自Eclipse建議在抽象類上添加一個序列版本的UID。設計抽象類時,我應該考慮序列化問題嗎?

由於類是這個類的抽象實例將永遠不會存在,因此他們永遠不會被序列化(只有派生類將是)。

所以我的問題是安全的將@SuppressWarnings("serial")放在一個抽象類的擴展將序列化(他們將serialVersionUIDs)?

當設計抽象類的擴展器將被序列化時,還有其他任何需要注意的問題都是值得歡迎的。

謝謝。

回答

3

每個可串行化類需要一個serialVersionUID。如果一個對象是本身擴展一個可串行化類的運行時類型,那麼涉及到兩個對象。所以,是的,你需要它,除非你決定不支持跨版本的序列化(比如Swing)。

+0

你的意思是說,在反序列化時,父類和子類可序列化類的UID都很重要? – Simeon

+1

@Simeon是的,每一個可序列化的類。 –

4

如果不是絕對需要的話(如果沒有狀態),不要使抽象類可序列化。您需要維護該類的序列化表單,併爲以前版本的序列化表單提供向後兼容性。但是,如果擴展類自己實現了Serializable,那麼您仍然需要提供一個無參數構造函數。

如果您決定實現Serializable接口,則需要抽象類的序列化版本uid,否則當新版本的抽象類被髮布時,序列化的擴展類形式將會中斷。