有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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'不是类、ParameterizedType或GenericarArrayType。无法提取类。”

如何使用T初始化我的TypeToken实例


共 (2) 个答案

  1. # 1 楼答案

    试试这个

    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; }
        };
    } 
    
  2. # 2 楼答案

    我已经几个月没有使用GSON了,但我记得:类是一种类型。您只需传递参数“clazz”来代替计算出的“typeOfSrc”