Java具有动态ArrayList项类型的Gson TypeToken
我有以下代码:
Type typeOfObjectsList = new TypeToken<ArrayList<myClass>>() {}.getType();List<myClass> objectsList = new Gson().fromJson(json, typeOfObjectsList);
它将JSON
字符串转换List
为对象的。但是,现在我想让它具有在运行时定义ArrayList
的动态类型(而不仅仅是myClass
)。
所述ArrayList
的项目类型将与被定义反射。
我尝试了这个:
private <T> Type setModelAndGetCorrespondingList2(Class<T> type) { Type typeOfObjectsListNew = new TypeToken<ArrayList<T>>() {}.getType();
return typeOfObjectsListNew;
}
但这是行不通的。这是例外:
java.sql.SQLException: Fail to convert to internal representation: {....my json....}
回答:
你提出的语法无效。下列
new TypeToken<ArrayList<Class.forName(MyClass)>>
之所以无效,是因为你试图传递期望类型名称的方法调用。
下列
new TypeToken<ArrayList<T>>()
由于泛型(类型擦除)和反射的工作方式,因此无法实现。整个TypeToken黑客工作,因为Class#getGenericSuperclass()
以下
返回表示该类表示的实体的直接超类的Type(类,接口,原始类型或void)。
如果超类是参数化类型,则返回的Type对象必须准确反映源代码中使用的实际类型参数。
换句话说,如果看到ArrayList<T>
,ParameterizedType
那么它将返回,并且你将无法提取类型变量T本应具有的编译时间值。
Type和ParameterizedType
都是接口。你可以提供自己的实现的实例。
以上是 Java具有动态ArrayList项类型的Gson TypeToken 的全部内容, 来源链接: utcz.com/qa/418791.html