作用
- 用于判断序列化文件是否已经失效(过期)。
- 序列化的时候会把这个ID写到文件里。
- 读的时候会把这个ID和代码里的ID比较,如果不一致,表示文件里的已经失效。(will result in an InvalidClassException.)
值写为多少
你可以写为1L,也可以让IDEA帮你生成一个。
不写会有什么问题
不写的话,序列话的时候,JVM会帮你动态的生成一个。这个动态生成的算法可能在不同的虚拟机里不一样,也就是不同的环境下生成的可能不同。这就会有一个问题,你序列化产生的文件,别人读的时候会 InvalidClassException。
注意:显示声明serialVersionUID可以避免对象不一致
两种显示的生成方式
一是默认的1L,比如:private static final long serialVersionUID = 1L;
二是根据包名,类名,继承关系,非私有的方法和属性,以及参数,返回值等诸多因子计算得出的,极度复杂生成的一个64位的哈希字段。基本上计算出来的这个值是唯一的。比如:private static final long serialVersionUID = xxxxL;
注意:显示声明serialVersionUID可以避免对象不一致
IntelliJ IDEA 编写类自动生成serialVersionUID
当我们用 IntelliJ IDEA 编写类并实现 Serializable(序列化)接口的时候,可能会遇到这样一个问题,那就是:无法自动生成serialVersionUID
在这里,我们就一起来看看如何利用 IntelliJ IDEA 自动生成serialVersionUID.
第 1 步:安装GenerateSerialVersionUID插件
如上图所示,点击Preferences,进入如下界面:
在这里,选择Plugins,并搜索GenerateSerialVersionUID,如果没有发现此插件,则可以点击Search in repositories进行搜索:
如上图所示,点击install,即可安装此插件。
第 2 步:设置Inspections功能
如上图所示,进入Default Settings,在Inspections设置页面中,勾选Serializable class without 'serialVersionUID',并且还可以在Severity中设置提示级别,如Warning、Error等,默认为Warning,也建议选择Warning级别的提示。
如上图所示,创建一个类并实现Serializable接口,然后按alt+Enter键,即可收到提示,然后选择SerialVersionUID:
如上图所示,显然我们已经利用 IntelliJ IDEA 中自动生成serialVersionUID啦!