3 回答

TA貢獻3593條經驗 獲得超0個贊

TA貢獻1795條經驗 獲得超7個贊
實現java.io.Serializable這個接口是為序列化,serialVersionUID 用來表明實現序列化類的不同版本間的兼容性。如果你修改了此類, 要修改此值。否則以前用老版本的類序列化的類恢復時會出錯。
這樣,即使某個類在與之對應的對象已經序列化出去后做了修改,該對象依然可以被正確反序列化。否則,如果不顯式定義該屬性,這個屬性值將由JVM根據類的相關信息計算,而修改后的類的計算結果與修改前的類的計算結果往往不同,從而造成對象的反序列化因為類版本不兼容而失敗。
不顯式定義這個屬性值的另一個壞處是,不利于程序在不同的JVM之間的移植。因為不同的編譯器實現該屬性值的計算策略可能不同,從而造成雖然類沒有改變,但是因為JVM不同,出現因類版本不兼容而無法正確反序列化的現象出現

TA貢獻1796條經驗 獲得超10個贊
沒有設置serialVersionUID,因為修改后反序列化得到的類,與修改前不一致,而缺乏序列化,導致失敗。
設置serialVersionUID后,它就會將不一樣的field以type的預設值Deserialize.這個可以避開不兼容性的問題

TA貢獻1846條經驗 獲得超7個贊
問題大了。。。。。。。建議用隨機值,而且每個類隨機生成一次后,以后改類了也不要改這個值。這個涉及到序列化的一些問題,如果沒有這個值,那更是要不得的。所有類都用同一個值也有問題哈。
- 3 回答
- 0 關注
- 16767 瀏覽
添加回答
舉報