我正在尝试编写一种方便的方法来从不同文件中读取对象列表。现在我有一个:
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
)时,它确实很奇怪。有办法解决上述方法吗?