2009-09-23 72 views
13

Eclipse很好地爲我生成serialVersionUID。但是這似乎是被動代碼生成,因爲除非我再次生成代碼,否則在更改文件時id不會自動更新。Eclipse自動生成serialVersionUID,每次更改

是否有某種方法可以在每次更改內容時生成serialVersionUID? 「保存操作」似乎沒有包含這樣的選項 - 有人找到了一種方法來做到這一點?

這將是很好,它可以結合IDE保存操作或類似的東西,這樣我可以恢復更改,如果我這樣做,不會影響序列化。

最好的問候, Touko

編輯:@gustafc:主要有兩個點是:

  • 如果我理解正確的,不同的編譯器可以使用不同的值最終爲的serialVersionUID
    • Serializable API但是,強烈建議所有可序列化類顯式聲明serialVersionUID值,因爲默認serialVers ionUID計算是類的細節可能取決於編譯器實現變化高度敏感,和反序列化
  • 我使用的是一種像在服務器處事對象的命令模式的過程中可能因此導致意外InvalidClassExceptions。因此,即使對象內容沒有改變,當客戶端和服務器上的類內容不同時,也很好地捕捉到這些情況。
    • 但是再想一想,這可能不適用於自動生成的值,因爲只有內容更改纔會改變它?所以,其實我想有一個自動遞增的serialVersionUID

這聽起來是合理的?

蘇瑪summarum,經過思考,在每個變化增加了自動遞增的serialVersionUID甚至會更好......

+0

你爲什麼要這樣做?如果你沒有指定一個,編譯器會自動生成與Eclipse相同的'serialVersionUID'。指定一個'serialVersionUID'的整個觀點是它*不應該改變,除非你做出重大改變(改變類層次結構或移除字段)。 – gustafc 2009-09-23 08:07:01

+0

@gustafc:看到編輯 – Touko 2009-09-23 08:20:54

回答

4

有在Eclipse沒有標準的功能做到這一點。

0

這個ID不會自動更新,因爲我改變了文件,除非我再次生成這個文件。

AFAIK默認serialVersionUID就是這一點 - 一個ID生成基於當前一類的「形狀」。所以如果你想在你改變任何東西的時候生成你的id,那麼就把它丟掉吧。

但是,如果您只是有時想更改serialVersionUID - 只需更改即可。隨機修改ID會做。

隨機數字只比連續數字好一點(如果您可以假設沒有其他人在您的環境中組成一個具有相同限定名稱的班級),那麼您甚至可以從serialVersionUID = 1開始並隨意增加此數字。

+0

然而,「只是把它拋出去」依賴於編譯器。如果序列化實際上正在使用,其他Java版本/編譯器正在使用等等,依靠一些您無法控制的東西並不是一個好主意。 – 2013-01-02 23:24:48