У меня есть функция, которая должна создавать список объектов типа, передаваемого в качестве общего.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. –