对象通过jdk序列化方式保存,报错:Not Serializable XXX$1,$1是个匿名内部类,要序列化的对象里没有属性是这个匿名类型的,而且$1是不应该序列化的,可是为什么会序列化到它呢?
原来同事写代码用到了guava的Lists.transform(),这里面接收一个Function对象,返回TransformingRandomAccessList对象,返回的这个TransformingRandomAccessList是List的一个实现,而这个list返回结果正好被赋给了要序列化的对象的一个属性上。如果TransformingRandomAccessList是类似于ArrayList这种可序列化的容器也没什么问题,这个List里面有2个属性:fromList和function,其中function就是前面的XXX$1,这个匿名内部类没有实现Serializable,因此序列化失败。
我们发现jdk自带的很多容器类都实现了Serializable接口,就是为了能够序列化。