在方法中使用泛型类型信息

时间:2011-04-04 03:33:56

标签: java generics

我有一个方法,其定义如下:

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实例?

2 个答案:

答案 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”