我需要传递一个Class作为参数,但我只有通用类型T.我如何推断泛型类并将其传递给fromJson()
?
public class Deserializer<T> implements JsonDeserializer<JsonList<T>> {
public T someMethod(){
...
T tag = gson.fromJson(obj, ???); // takes a class e.g. something.class
...
}
}
由于
答案 0 :(得分:6)
感谢Java Type Erasure,你不能。
http://docs.oracle.com/javase/tutorial/java/generics/erasure.html
答案 1 :(得分:3)
您无法在运行时生成它。这就是Gson#fromJson()
要求你传递它的原因。
答案 2 :(得分:2)
假设Deserializer
是您的类,执行此操作的典型方法是将Class
作为构造函数参数:
public class Deserializer<T> implements JsonDeserializer<JsonList<T>> {
public static <T> Deserializer<T> newInstance(Class<T> c) {
return new Deserializer<T>(c);
}
private final Class<T> clazz;
private Deserializer(Class<T> c) { this.clazz = c; }
public T someMethod(){
...
T tag = gson.fromJson(obj, clazz); // takes a class e.g. something.class
...
}
}
然后在客户端代码中:
Deserializer<String> d = Deserializer.newInstance(String.class);