【问题标题】:Java List of parameterized generic type creates different type of objectsJava 参数化泛型类型列表创建不同类型的对象
【发布时间】:2016-04-25 12:37:07
【问题描述】:

我有一个函数需要创建作为泛型传入的类型的对象列表。

public static <T> List<T> readJsonFile(final String filePath) {

    List<T> objectsFromFile=null;
    File file = new File(System.getProperty("catalina.base") + filePath);
    Gson gson = new Gson();
    try (FileInputStream JSON = new FileInputStream(file)) {
        BufferedReader br = new BufferedReader(new InputStreamReader(JSON));
        objectsFromFile = gson.fromJson(br, new TypeToken<List<T>>() {
        }.getType());
    } catch (Exception e) {
        e.printStackTrace();
    }
    return objectsFromFile;
}

当我查看结果列表中的对象类型时,它们不是 T 类型(T 将是我定义的不同类)而是 com.google.gson.internal.LinkedTreeMap 类型.

有人知道为什么吗?我怎样才能使它返回的列表是 T 类型的?

【问题讨论】:

    标签: java json generics gson


    【解决方案1】:

    这是因为泛型类型令牌由于擦除而不起作用。

    需要将TypeToken&lt;List&lt;T&gt;&gt;作为参数注入,具体实例化。

    public static <T> List<T> readJsonFile(
        final String filePath, final TypeToken<List<T>> typeToken) {
      // ...
      objectsFromFile = gson.fromJson(br, typeToken.getType());
      // ...
    }
    

    然后将其称为:

    readJsonFile("/path/to/file.json", new TypeToken<List<String>>() {});
    

    【讨论】:

    猜你喜欢
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多