当前位置: 首页 > 知识库问答 >
问题:

Java类型Generic作为GSON的参数

傅志诚
2023-03-14

在GSON中获取对象列表

Gson gson = new Gson();
Type token = new TypeToken<List<MyType>>(){}.getType();
return gson.fromJson(json, token);
// the common function 
public <T> List<T> fromJSonList(String json, Class<T> type) {
  Gson gson = new Gson();
  Type collectionType = new TypeToken<List<T>>(){}.getType();
  return gson.fromJson(json, collectionType);
}

// the call
List<MyType> myTypes = parser.fromJSonList(jsonString, MyType.class);

遗憾的是,返回的是StringMaps数组,而不是类型。T被解释为另一个泛型类型,而不是我的类型。有什么办法吗?

共有1个答案

闻人宜
2023-03-14

由于GSON 2.8.0,您可以使用TypeToken#GetParametized((Type rawType,Type...typeArguments))创建TypeToken,那么GetType()就可以完成这个任务。

例如:

TypeToken.getParameterized(List.class, myType).getType();
 类似资料:
  • 我想在我的项目中使用SpringDataJPA存储库。通常我创建自己的存储库 但是,我想提供符合以下条件的更复杂的情况: > 我有一个具有共同定义的基本实体: 我有扩展上述实体的所有其他实体,例如: 和

  • 问题内容: 您认为可以创建类似的东西吗? 问题答案: 是的你可以。 用法示例:

  • 问题内容: 问题摘要: 我想将具有类型参数(例如)的类作为类型参数传递给泛型方法。 假设我有一个方法: 当然,此方法对于任何类型的类都可以正常使用。我可以这样调用该方法,例如: 问题: 我发现我不能这样做: 从句法上讲,这显然是无效的。但是,我不确定如何实现这样的目标。我当然可以通过,但是泛型类型的添加使其在语法上不再有效,并且我想不出解决方法。 唯一的直接解决方案是这样的事情(看起来很愚蠢):

  • 你好,我有两个类:Person类和Employee类,它们扩展了Person 我想写一个函数,将添加人到下界参数化列表 但是eclipse不允许它,错误消息是:“类型列表中的方法add(capture#1-of?super Employee)不适用于参数(Person)

  • 我想使用泛型类作为另一个泛型类的类型参数。 起初,我对类的定义是这样的: 然后我的需求发生了变化,我不得不为我的R类型使用包装器/持有者类 到目前为止,我的尝试:(给出编译时错误:

  • 问题总结:我想传递一个带有类型参数(如