繁体   English   中英

参数化泛型类型的Java列表创建不同类型的对象

[英]Java List of parameterized generic type creates different type of objects

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

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类型的?

这是因为泛型类型令牌由于擦除而无法工作。

您需要注入TypeToken<List<T>>作为参数,具体实例化。

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>>() {});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM