反序列化不可变List时出现ClassCastException问题求助
反序列化ClassCastException问题:CollSer无法转换为List
问题核心
- 反序列化对象时抛出
java.lang.ClassCastException:java.util.CollSer实例无法赋值给a.b.c.SubClass中a.b.c.BaseClass.aField的java.util.List类型字段 - 序列化阶段,该字段的List是通过
List.copyOf(originalList)生成的不可变列表 - 临时修复方案是直接返回
originalList替代List.copyOf,但这会导致列表可能被多个BaseClass实例共享,存在并发修改或意外篡改风险 - 调试确认:异常发生时
CollSer未通过readResolve机制替换为List实例,问题根源指向java.util.ImmutableCollections$List12的序列化实现
环境与已知关联
- 涉及环境:OpenJDK 17、OpenJDK 20
- 该问题已在Java Bug数据库中登记(Bug ID: 8304814),属于JDK本身的序列化逻辑缺陷
内容的提问来源于stack exchange,提问作者cquezel
相关产品推荐
相关产品推荐

