You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 04:05:27