你getGenericClass()
不会工作,你需要检索 T 的类。
你可以提供它:
Class<T> type;
public Class<T> getType() {
return this.type;
}
或者在运行时获取它(不安全,我认为你可以在这个 subjet 上找到很多帖子)
public Class<T> getType() {
return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
}
然后要构建列表令牌,您可以使用以下代码:
static TypeToken<?> getGenToken(final Class<?> raw, final Class<?> gen) throws Exception {
Constructor<ParameterizedTypeImpl> constr = ParameterizedTypeImpl.class.getDeclaredConstructor(Class.class, Type[].class, Type.class);
constr.setAccessible(true);
ParameterizedTypeImpl paramType = constr.newInstance(raw, new Type[] { gen }, null);
return TypeToken.get(paramType);
}
检查我在此处提供的示例:GSON 反序列化复杂对象数组