如何使用Gson从文件中读取参数化列表?

时间:2018-12-04 18:53:52

标签: java generics gson generic-list typetoken

我正在尝试编写一种方便的方法来从不同文件中读取对象列表。现在我有一个:

public <T> List<T> parseList(String file) {
    ClassLoader loader = Thread.currentThread().getContextClassLoader();

    try (Reader reader = new InputStreamReader(loader.getResourceAsStream(file))) {

        return gson.fromJson(gson.newJsonReader(reader), new TypeToken<ArrayList<T>>(){}.getType());

    } catch (Exception e){
        LOGGER.error("Cannot read json file "+ file, e);
        throw new JBCCannotReadFileException(e);
    }
}

当我尝试使用这种方法时:

List<MyObject> myList = parseList(filtPath);

它返回List<LinkedTreeMap<...>>。奇怪的是,它已成功将该值分配给List<MyObject>,并且在我尝试访问myList之后,它抛出了一个异常,即LinkedTreeMap无法转换为MyObject

当我使用new TypeToken<ArrayList<MyObject>>(){}.getType()而不是new TypeToken<ArrayList<T>>(){}.getType()时,它可以按预期工作,但是当类型为通用(T)时,它确实很奇怪。有办法解决上述方法吗?

0 个答案:

没有答案