即使我沒有添加private static final long serialVersionUID = 1L;
或類似的東西,我也只能將對象保存到數據庫中,如果implements Serializable
。帶有serialVersionID的域對象?
問題:我必須設置此serialID爲必填項嗎?如果我不這樣做有什麼缺點?
即使我沒有添加private static final long serialVersionUID = 1L;
或類似的東西,我也只能將對象保存到數據庫中,如果implements Serializable
。帶有serialVersionID的域對象?
問題:我必須設置此serialID爲必填項嗎?如果我不這樣做有什麼缺點?
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
爲您的序列化和反序列化過程
我認爲這不是強制性的。當我創建一個擴展JFrame的類時,Eclipse會顯示相同的警告。我總是添加@SuppressWarnings("serial")
。
您不需要serialVersionUID
就可以使對象可序列化。只有在需要能夠讀取使用舊版本類的序列化對象時才需要,或者在進行一些小的更改(例如字段的排序)時維護序列化格式。
我寫了一個blog post(法語對不起,但google translate可以幫助)。
你還不如禁用完全在工作區設置警示則:/我寧願只是讓Eclipse中生成默認的serialVersionUID而不是添加註釋。 – Gimby