在实现Serializable的类中,有经验的开发都会实现serialVersionUID。
这是因为如果没有serialVersionUID的话,如果该类中的字段发生变更(新增或删减),
那么反序列化将失败,导致取出的对象为null。
比如memcached中,会在反序列化方法中创建XmcObjectInputStream()时抛出异常,导致返回的对象为null。
源码中即:
测试实例伪代码如下:
class Student() implement Serializable{
Integer age;
String name;
List<Teacher> teacherList;
}
class Teacher implement Serializable{
Integer age;
String name;
}
然后将Student对象存入缓存中,并从缓存中取出。这一步正常取出存入的对象。
随后在Student中新增字段 Integer height;
再次从缓存中取出上次存入的对象,发现输出为null。
随后对Student和Teacher类都加上serialVersionUID,再次做上面新增字段的测试,发现正常取出对象。