2012-04-30 88 views
11

有沒有什麼方法可以在Eclipse中串行生成serialVersionUID?串行我想表示,如果一個可序列化的類有serialVersionUID = 1L,那麼當我生成另一個類的serialVersionUID時,這將是serialVersionUID = 2L。關於在Eclipse中生成的serialVersionUID

如果我手動指定1L,2L,3L等,這會產生什麼問題嗎?

Eclipse給出了一個選項來選擇「添加生成的序列版本ID」,這個選項是否安全可以選擇?

+1

你爲什麼要*不同的類具有串行serialVersionUIDs? –

+0

這是我的編程風格,以串行方式生成serialVersionUID。 –

+2

這是跨單個課程版本的一種常見風格。你在多個班級的風格是否有益?當你以後想要編寫一個特定的類時,你爲什麼設置該類的serialVersionUID,以及類之間的串行關係會發生什麼? –

回答

17

不,它不會在你的任何兩種情況造成任何問題:

  • 你可以手動指定其增量
  • 可以讓Eclipse中爲它們分配隨機生成的值
  • 你可以讓他們所有1L不同類別

串行UID的目的是禁止的序列化和反序列化相同的類在不同版本中,特別是當沒有向前兼容性(例如,新版本的類不能被先前定義序列化/反序列化)。

這是一種很少發生的情況,特別是在處理自己的項目時,這些項目不依賴於序列化的大型框架。所以你可以安全地做任何你想要的。

您希望爲同一個類使用不同序列的情況是當您更新某個類並且您希望禁止使用SAME類的先前聲明對其進行序列化時。

+2

'@SuppressWarnings(「serial」)'?這將如何改變事情?建議,不推薦?避免? – ADTC

+2

@ADTC它的工作原理,但受制於編譯器的不兼容性。請參見Serializable接口。從Java 7開始:「如果可序列化類沒有明確聲明serialVersionUID,則序列化運行時將基於該類的各個方面計算該類的默認serialVersionUID值,如Java(TM)對象序列化規範中所述。然而,根據編譯器實現的不同,可能會有所不同,因此可能會導致意外的「 – Kissaki

2

讓我回答你的問題:

添加生成的序列版本ID ...是否安全?答:是的

如果要手動指定1L,2L,3L是一個問題:沒有比讓他們更多的問題全部1或任何其他數目

生成序列ID順序:答案是沒有內置的機制來做到這一點。事實上,你問這個問題讓我相信你不知道serialVersionUID是什麼。即使你已經閱讀過這些內容,你應該再讀一遍。

+0

感謝您的答案。是的,我知道爲什麼sserialVersionUID已被使用,但它是我的編程風格,在Eclipse中的項目中以串行方式生成它們。 –

2

你不應該這樣做。我們的想法是通過觀察對象序列化規範的對象版本控制部分中的規則,在類的進化過程中儘可能長時間地保持常量serialVersionUID

你的'編程風格'與它無關。這是將它用於其設計目的的問題。它不是爲您使用它的目的而設計的。源代碼控制系統可以爲你做到這一點。

+0

如果您希望自己的課程長時間有用,那麼您應該只進行「兼容性更改」,所有這些都在此處@EJP提及的「對象序列化規範」中定義。 –