IDEA 設定 快速生成serialVersionUID
在介紹serialVersionUID的自動生成設定(非常簡單,就兩步,後面有),我覺得我有必要有我個人的理解去描述一下 這個
Serializable,‘序列化’是什麼意思? 作用是啥? 因為我之前也沒做了解,也只是跟著序列化序列化。
個人理解:
序列化, 這個東西有什麼用呢。 舉個例子, 暗號,大家都知道吧。 暗號的背後是有它的意義的。 (例如敲門三長兩短,代表:自己人,開門吧)
那麼給一個實體類序列化, 我個人認為,就是將類暗號化。
例如,我建立一個User類, 開始只有姓名、年齡這兩個欄位。 然後我給這個類起暗號(序列化),暗號就叫123456789L,,一旦取了暗號,我們(交流雙方)都知道了暗號背後的意義。 那麼我們看到暗號就等於能知道里面有姓名、年齡這兩個欄位。
(以上是個人庸俗的表達)
現在來說序列化類的2種情況以及一些個人測試結論,
① 僅僅在類後面 繼承了Serializable(沒有自己設定一個序列化號 類似
private static final long serialVersionUID = -6247771733775111242L;
)。
那麼在我們正常給這個類起暗號的時候,大家都是能正確解讀背後的意義的。 但是, 如果我私下把暗號背後的意義修改了,也就是在對User類起完暗號後,把User類的欄位加上了身高、體重這些額外的欄位。 那麼。你(反序列化讀取相關資訊)不知道,你還保留在之前的思想,暗號是123456789L。 然後這種情況,大家的資訊就不對稱了,那麼你就會反序列失敗。
這種情況是,僅僅是繼承了Serializable,序列化號是java自己幫你設定的。
②不僅在類後面 繼承了Serializable,而且自己設定了序列化號。
這種情況,在類被序列化之後, 你再怎麼修改內容,因為我們自己設定好了序列化號, 在反序列化的時候,會根據這個序列化號去查出對應的類的內容,這樣就不會出現資訊不匹配了。
所以,我推薦,給序列化,那麼就繼承Serializable並設定下自動生成下序列化號。
自動設定生成serialVersionUID方法如下:
(設定完後,繼承下Serializable,然後按Alt+Enter 快捷鍵 ,add就OK)
(快捷鍵不一樣的話,那你滑鼠對著波浪線,用自己的快捷鍵就好)