當(dāng)我們用 IntelliJ IDEA 編寫(xiě)類(lèi)并實(shí)現(xiàn) Serializable(序列化)接口的時(shí)候,可能會(huì)遇到這樣一個(gè)問(wèn)題拯爽,那就是:
無(wú)法自動(dòng)生成serialVersionUID.
而serialVersionUID又是一個(gè)非常重要的字段纠修,因?yàn)?Java 的序列化機(jī)制是通過(guò)在運(yùn)行時(shí)判斷類(lèi)的serialVersionUID來(lái)驗(yàn)證版本一致性的淘讥。在進(jìn)行反序列化時(shí)士袄,JVM 會(huì)把傳來(lái)的字節(jié)流中的serialVersionUID與本地相應(yīng)實(shí)體(類(lèi))的serialVersionUID進(jìn)行比較,如果相同就認(rèn)為是一致的襟锐,可以進(jìn)行反序列化撤逢,否則就會(huì)出現(xiàn)序列化版本不一致的異常。
一般來(lái)說(shuō)粮坞,定義serialVersionUID的方式有兩種蚊荣,分別為:
采用默認(rèn)的1L,具體為private static final long serialVersionUID = 1L;
根據(jù)類(lèi)名莫杈、接口名互例、成員方法及屬性等來(lái)生成一個(gè)64位的哈希字段,例如 private static final long serialVersionUID = XXXL;
而 Java 類(lèi)進(jìn)行序列化也兩個(gè)主要目的姓迅,分別為:
把對(duì)象的字節(jié)序列永久地保存到硬盤(pán)上敲霍,通常存放在一個(gè)文件中;
在網(wǎng)絡(luò)上傳送對(duì)象的字節(jié)序列丁存。
在這里肩杈,我們就一起來(lái)看看如何利用 IntelliJ IDEA 自動(dòng)生成serialVersionUID.
第 1 步:安裝GenerateSerialVersionUID插件
如上圖所示,點(diǎn)擊Preferences解寝,進(jìn)入如下界面:
在這里扩然,選擇Plugins,并搜索GenerateSerialVersionUID聋伦,如果沒(méi)有發(fā)現(xiàn)此插件夫偶,則可以點(diǎn)擊Search in repositories進(jìn)行搜索:
如上圖所示界睁,點(diǎn)擊install,即可安裝此插件兵拢。
第 2 步:設(shè)置Inspections功能
如上圖所示翻斟,進(jìn)入Default Settings,在Inspections設(shè)置頁(yè)面中说铃,勾選Serializable class without 'serialVersionUID'访惜,并且還可以在Severity中設(shè)置提示級(jí)別,如Warning腻扇、Error等债热,默認(rèn)為Warning,也建議選擇Warning級(jí)別的提示幼苛。
如上圖所示窒篱,創(chuàng)建一個(gè)類(lèi)并實(shí)現(xiàn)Serializable接口,然后按Option+Enter鍵(本人為MAC用戶(hù)舶沿,windows用戶(hù)是Alt+Enter鍵)墙杯,即可收到提示,然后選擇SerialVersionUID:
如上圖所示暑椰,顯然我們已經(jīng)利用 IntelliJ IDEA 中自動(dòng)生成serialVersionUID啦