只需添加
private static final long serialVersionUID = 1L;//or some long
Docs每個序列化類形容它很好
的序列化運行聯營 版本 號,稱爲的serialVersionUID, 這是反序列化 期間用於驗證序列化對象的發件人和收件人 已加載 類對於 與 序列化兼容的那個對象。如果接收方爲 加載了一個對象的類,該對象的 與對應的發件人類的 不同的serialVersionUID,然後反序列化將導致InvalidClassException的 。可序列化 類可以通過 聲明名爲 「的serialVersionUID」字段必須顯式聲明自己的 的serialVersionUID 靜態的,最終,和long類型:
ANY-ACCESS-MODIFIER static final long serialVersionUID = 42L;
如果 序列化類沒有明確 聲明serialVersionUID,則 串行化運行時將計算 默認serialVersionUID值 該類基於 該類的各個方面,如 Java(TM)Obj ect序列號 規範。然而,強烈 建議所有可序列化 類中明確聲明 的serialVersionUID值,因爲 默認的serialVersionUID計算 是類細節 高度敏感,可能取決於編譯器 實現而不同,因此可能會導致意外InvalidClassExceptions 在反序列化過程中。因此,要保證 保證一致 serialVersionUID值跨越 不同的java編譯器 的實現,可序列化類 必須聲明明確的 serialVersionUID值。這也是 強烈建議明確 的serialVersionUID聲明使用 private修飾符在可能的情況,因爲 這些聲明僅適用於 立即宣佈 類 - serialVersionUID的域不 可用作繼承的成員。
請參見
你如何產生7526472295622776147L? – user496949 2011-04-12 08:01:57
您只需選擇一個隨機(唯一)長整型值。在Eclipse中,你可以做*資料來源清理...-> Custome簡介 - >缺少代碼 - >添加序列版本ID * – aioobe 2011-04-12 08:02:43
感謝aioobe,最後一點是我需要知道的。 – 2011-12-27 19:47:39