3 回答

TA贡献3593条经验 获得超1个赞

TA贡献1795条经验 获得超7个赞
实现java.io.Serializable这个接口是为序列化,serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。如果你修改了此类, 要修改此值。否则以前用老版本的类序列化的类恢复时会出错。
这样,即使某个类在与之对应的对象已经序列化出去后做了修改,该对象依然可以被正确反序列化。否则,如果不显式定义该属性,这个属性值将由JVM根据类的相关信息计算,而修改后的类的计算结果与修改前的类的计算结果往往不同,从而造成对象的反序列化因为类版本不兼容而失败。
不显式定义这个属性值的另一个坏处是,不利于程序在不同的JVM之间的移植。因为不同的编译器实现该属性值的计算策略可能不同,从而造成虽然类没有改变,但是因为JVM不同,出现因类版本不兼容而无法正确反序列化的现象出现

TA贡献1796条经验 获得超10个赞
没有设置serialVersionUID,因为修改后反序列化得到的类,与修改前不一致,而缺乏序列化,导致失败。
设置serialVersionUID后,它就会将不一样的field以type的预设值Deserialize.这个可以避开不兼容性的问题

TA贡献1846条经验 获得超7个赞
问题大了。。。。。。。建议用随机值,而且每个类随机生成一次后,以后改类了也不要改这个值。这个涉及到序列化的一些问题,如果没有这个值,那更是要不得的。所有类都用同一个值也有问题哈。
- 3 回答
- 0 关注
- 16842 浏览
添加回答
举报