2014-01-09 60 views
0

即使我沒有添加private static final long serialVersionUID = 1L;或類似的東西,我也只能將對象保存到數據庫中,如果implements Serializable帶有serialVersionID的域對象?

問題:我必須設置此serialID爲必填項嗎?如果我不這樣做有什麼缺點?

回答

1
First what is SerialVersionUID and is it mandatory? 

serialVersionUID被用作Serializable類中的版本控制。如果您沒有明確聲明serialVersionUID,則JVM將根據您的Serializable類的各個方面自動爲您執行此操作,如Java(TM) Object Serialization Specification中所述。

Drawbacks if I dont? 

默認的serialVersionUID計算是類細節高度敏感和可從不同的JVM實現反序列化過程而變化,並且導致意外InvalidClassExceptions

因此,爲了避免這種情況,最好指定serialVersionUID爲您的序列化和反序列化過程

0

我認爲這不是強制性的。當我創建一個擴展JFrame的類時,Eclipse會顯示相同的警告。我總是添加@SuppressWarnings("serial")

+0

你還不如禁用完全在工作區設置警示則:/我寧願只是讓Eclipse中生成默認的serialVersionUID而不是添加註釋。 – Gimby

2

您不需要serialVersionUID就可以使對象可序列化。只有在需要能夠讀取使用舊版本類的序列化對象時才需要,或者在進行一些小的更改(例如字段的排序)時維護序列化格式。

我寫了一個blog post(法語對不起,但google translate可以幫助)。