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

如何获取已实例化泛型类型的java.lang.reflect.Type?

用Gson处理泛型列表的类型适配器注册方案

Java的泛型擦除机制确实让我们无法直接通过List<SomeClass>.class这种写法获取带具体泛型参数的类型对象,但Gson提供的TypeToken类可以完美解决这个问题,它能在编译时捕获泛型类型信息。

具体实现方式

  1. 针对你的两种具体泛型列表类型,分别用TypeToken的匿名子类获取对应的Type对象:
// 假设第一种具体类型是FirstItem
Type listOfFirstItem = new TypeToken<List<FirstItem>>() {}.getType();
// 第二种具体类型是SecondItem
Type listOfSecondItem = new TypeToken<List<SecondItem>>() {}.getType();
  1. 把这两个Type对象分别和对应的适配器绑定注册:
Gson gson = new GsonBuilder()
    .registerTypeAdapter(listOfFirstItem, new FirstItemListAdapter())
    .registerTypeAdapter(listOfSecondItem, new SecondItemListAdapter())
    .create();

为什么这个方法可行

TypeToken借助了Java匿名内部类的特性:当你创建TypeToken<List<FirstItem>>的匿名子类时,编译器会把这个具体的泛型参数信息保留在子类的字节码中,运行时通过getType()方法就能反射获取到完整的泛型类型,正好匹配GsonregisterTypeAdapter方法所需的Type参数。

内容的提问来源于stack exchange,提问作者Deling Ren

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 15:32:36