在Java类(或其父类)继承serializable 接口时,会出现“The serializable class XXX does not declare a static final seriaVersionUID field of type long”警告,有三种快速解决方案:
1.add default serial version ID
2.add generated serial version ID
3.add ·Suppress Warnings 'serial' to 'XXX'
SerialVersionUid目的是序列化对象版本控制,有关各版本反序列化时是否兼容。如果在新版本中这个值修改了,新版本就不兼容旧版本,反序列化时会抛出InvalidClassException异常。如果修改较小,比如仅仅是增加了一个属性,我们希望向下兼容,老版本的数据都能保留,那就不用修改;如果我们删除了一个属性,或者更改了类的继承关系,必然不兼容旧数据,这时就应该更新版本号,即SerialVersionUid。
序列化一个类实例后,更改一个字段或添加一个字段,不设置serialVersionUID,所做的任何更改都将导致无法反序化旧有实例,并在反序列化时抛出异常;如果添加了serialVersionUID,在反序列旧有实例时,新添加或更改的字段值将设为初始化值,字段被删除将不设置。
如果不显式声明,JVM会为我们自动产生一个值,但这个值和编译器的实现相关,并不稳定,这样就可能在不同JVM环境下出现反序列化时报InvalidClassException异常。