【问题标题】:How to set an ArrayList Type dynamically using the class name?如何使用类名动态设置 ArrayList 类型?
【发布时间】:2018-12-03 11:41:01
【问题描述】:

使用 Gson 库,我通过以下代码将 JSON 字符串转换为 ArrayList 对象:

posts = gson.fromJson(json, new TypeToken<List<Post>>(){}.getType());

我使用以下代码将 json 转换为类对象:

obj = gson.fromJson(json, Class.forName(fullClassName));

您在第二个代码中看到我使用反射来指定类的类型; 但是对于第一个代码,我不知道如何使用反射指定列表的类型。

我该怎么办?!

【问题讨论】:

  • 感谢 Luk,为我工作第三个答案,但我无法将 ArrayList 项转换为原始类对象,这会引发异常并显示以下消息:"com.google.gson.internal.LinkedTreeMap can not be cast to com.example.test.User"。当然我通过Class.forName("com.example.test.User") 作为Class&lt;T&gt; type 的参数。

标签: java reflection gson


【解决方案1】:

所以,据我了解,您需要反序列化对象列表,但类型在编译时未知,但您是动态提供的?
你可能想为你的类型使用类似的东西:

TypeToken.getParameterized(List.class, Class.forName("foo.bar.MyDynamicType"))

这将创建与

相同的类型
new TypeToken<List<MyDynamicType>>(){}.getType()

【讨论】:

  • 非常感谢。它可以正常工作:Object list = gson.fromJson(json, TypeToken.getParameterized(List.class, Class.forName("foo.bar.MyDynamicType")).getType());。所以,我可以将列表对象转换为原始的 Class 对象,没有任何问题。
猜你喜欢
  • 1970-01-01
  • 2019-12-11
  • 1970-01-01
  • 2021-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多