Java中List<?>转对象列表报错?Gson反序列化问题及解决
Java中如何将List<?>转换为指定对象列表?
问题场景
定义包含List<?>的实体类:
@Data public class Example { private List<?> data; }
在接口中使用Gson反序列化后尝试强制转换列表类型:
@PostMapping("/getResult") @ResponseBody public Result getResult(@RequestBody String json) { Gson gson = new Gson(); Example xmpl = gson.fromJson(json, Example.class); List<MyObject> source = (List<MyObject>)xmpl.getData(); // 执行此处时报错 // 后续业务逻辑 return result; }
报错信息
class com.google.gson.internal.LinkedTreeMap cannot be cast to class com.myproject.MyObject
问题本质
实际并非泛型通配符?转Object的问题,而是Gson在反序列化未知类型的JSON数组时,会默认将每个元素转为LinkedTreeMap实例,直接强制转换为自定义MyObject类型会抛出类型转换异常。
解决方法
先将List<?>重新序列化为JSON字符串,再反序列化为指定类型的数组:
String jsonData = gson.toJson(xmpl.getData()); MyObject[] objs = gson.fromJson(jsonData, MyObject[].class);
如果需要可直接使用的List<MyObject>,可以进一步转换:
// 不可修改的List List<MyObject> objList = Arrays.asList(objs); // 可修改的List List<MyObject> mutableList = new ArrayList<>(Arrays.asList(objs));
内容的提问来源于stack exchange,提问作者esthrim
相关产品推荐
相关产品推荐

