(一些對象的狀態(tài)需要保存到磁盤或數(shù)據(jù)庫中時(shí),需要實(shí)現(xiàn)Serializable接口)
結(jié)論:在實(shí)現(xiàn)Serializable接口時(shí),IDE一般會(huì)提醒你設(shè)置一個(gè)SerialVersionID,這樣做的好處是方便在不同編譯器之間代碼的移植。編譯器在讀取Serial對象時(shí),會(huì)比較source與target的SerialVersionID是否一致,如果一致會(huì)產(chǎn)生InvalidClassException。
在Eclipse中忽略該情況操作方法:Window-->Preferences-->Java-->Compiler-->Errors/Warnings-->Potential programming problems
問題:SerialVersionID是否在不同的類中有不同的值?
回答:不需要。因?yàn)镾erialVersionID本身是static final,是全局的,而且一般都是針對當(dāng)前類,所以一般都是private。編譯器在DeSerializable的時(shí)候,對象都是當(dāng)前類,不需要不同類設(shè)置不同值。
問題:不顯示聲明SerialVersionID是錯(cuò)的嗎?
回答:不是。編譯器有自己的生成SerialVersionID的規(guī)則,但是不同編譯器的規(guī)則又是不一致的,這樣就會(huì)造成已Serial對象SerialVersionID與當(dāng)前編譯器DeSerial出來的SerialVersionID不一致,產(chǎn)生Exception。盡可能將所有可以序列化類都顯示聲明SerialVersionID。