我有一个方法,其定义如下:
public static <T> List fromInputStreamToObject(InputStream inputStream, Class<T> clazz) throws Exception{
List objects = null;
try {
if(inputStream!=null){
Reader reader = new BufferedReader(new InputStreamReader(
inputStream));
Type typeOfSrc = new TypeToken<JsonConverter<T>>(){}.getType();
JsonConverter jsonConverter = getGson().fromJson(reader, typeOfSrc);
if(jsonConverter!=null)
objects = jsonConverter.getData();
}
} catch (Exception e) {
throw e;
}
return objects;
}
这不会产生任何编译错误,但
Type typeOfSrc = new TypeToken<JsonConverter<T>>(){}.getType();
给出运行时异常“类型'T'不是Class,ParameterizedType或GenericArrayType。不能提取类。”
如何使用T初始化我的TypeToken实例?
答案 0 :(得分:2)
试试这个
Type typeOfSrc = type(JsonConverter.class, clazz);
// type(C, A1,...,An) => C<A1,...,An>
static ParameterizedType type(final Class raw, final Type... args)
{
return new ParameterizedType()
{
public Type getRawType(){ return raw; }
public Type[] getActualTypeArguments(){ return args; }
public Type getOwnerType(){ return null; }
};
}
答案 1 :(得分:0)
我在几个月内没有使用过GSON,但我记得:一个类是一个类型。您只需传递参数“clazz”代替计算出的“typeOfSrc”