建议指定UID,因为UID可以帮助你实现新老版本的兼容性。
A、对于实现Serializable接口的实现类:
参考:https://www.cnblogs.com/duanxz/p/3511695.html
假设:序列化之前为A类,经过序列化、反序列化为B类,指定uid,保持不变。
case1:A类B类完全一样,序列化、反序列化成功
case2:A类不变,序列化,B类增加字段,反序列化后,B类新增的字段为默认值
case3:A类不变,序列化,B类减少字段,反序列化 成功 A类比B类多的字段被忽略
B、对于实现Externalizable的接口
假设:序列化之前为A类,经过序列化、反序列化为B类,指定uid,保持不变。
case1:A类B类完全一样,序列化、反序列化成功
case2:A类不变,序列化,B类增加字段,反序列化后,B类新增的字段readObject时报错,这是与上面不同的地方
case3:A类不变,序列化,B类减少字段,反序列化 成功 A类比B类多的字段被忽略
uid可以解决A场景下兼容性问题, 对于B场景只能解决一部分,
网上大部分材料都是描述场景A的,对于场景B中的case2不知道有什么解决办法没?