2011-05-10 20 views

回答

3

根本不需要放置serialVersionUID。

Java將自動確定基於字段,方法等,爲你的類適當的序列ID

唯一適當的時候有serialVersionUIDs是當你將存儲你的對象到一個文件中,將需要加載他們以後,甚至在你改變你的代碼之後。

或者,如果您將通過使用不同版本的庫的組件之間的數據傳輸數據。

90%的人需要序列化的時間,它是實時的,並保證雙方的庫版本匹配。在這些情況下,如果您有兩個不兼容的庫版本,但沒有更改sID,則無需設置serialVersionUID,實際上可能會導致問題。由於Java認爲它們是串行兼容的,實際上,它們不會是奇怪的錯誤。

這些問題,看看還有:

Is there a reason to use a real serialVersionUID?

Why generate long serialVersionUID instead of a simple 1L?

What is a serialVersionUID and why should I use it?

編輯補充:

至於原來的問題,沒有你不需要擔心你的祖先。只要serialVersionUID會告訴Java它是否兼容。

但是,如果祖先改變了,並且你的serialVersionUID沒有改變,即使你是這麼說的,它可能不兼容。你不應該設置它的另一個原因。

+2

我想你錯過了這個問題的關鍵。這不是關於你是否應該使用'serialVersionUID',但如果你*使用它,那麼它是否應該在超類和子類中使用? – skaffman 2011-05-10 21:41:36

+0

那麼,他確實問過,我引用,「或者只是在Serializable類本身?」他的前提是錯誤的,因爲多年來傳遞了許多不良信息,所以我正在糾正它。 – 2011-05-10 21:44:13

+1

如果你沒有注意到,你最後一個鏈接中被接受的和最高票數的答案實際上與你的答案相反。它建議(實際可串行化的javadoc),你總是聲明一個。第一和第二個鏈接是一個不同但相關的問題。 – Robin 2011-05-10 21:56:27

相關問題