[英]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.