0
我有一个函数需要创建一个类型的对象列表作为泛型传入。Java参数化泛型类型列表创建不同类型的对象
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型?
优秀的答案谢谢。我是新的与泛型工作,所以我不知道擦除是什么,但我会检查出来。 – dragosb
它基本上意味着你不能在运行时访问'T',因为泛型实现的方式。请参阅https://docs.oracle.com/javase/tutorial/java/generics/erasure.html –