從2004年開始,我已經有了一個Serializable
類,該類已在生產中使用。但是,編寫它的人忘記了生成serialVersionUID
。將SerialVersionUID添加到已被使用的可序列化類中
事情排序作品(有一個很大的評論警告,在班上不碰任何東西),但在不同的相關工作類,而我有一個InvalidCastException
,所以我要添加serialVersionUID
可以肯定的整該班正常工作。
問題是,是否有可能添加這樣一個字段,而不存在序列化實例中斷?它們中有很多,並且沒有簡單的方法來修改它們。
我的想法來自看到異常消息,這是沿着線的東西:我一直以爲我可以使用隱式串行(流classdesc在跟蹤)作爲串行
java.io.InvalidClassException: the.problematic.Class; local class incompatible: stream classdesc serialVersionUID = -8802277085918151566, local class serialVersionUID = -3137213695071887162"
,它應該保持向後兼容性。它是否正確?我(或多或少)確定我們在系統中獲得的所有序列化實例都是相同的版本。
我明白了,我不確定這個id的計算方式是在jdk版本中定義和保持不變的 –