Ich habe eine Funktion, die eine Liste von Objekten eines Typs erstellen muss, der als generische übergeben wird.Java Liste von parametrisierten generischen Typ erstellt verschiedene Arten von Objekten
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;
}
Als ich bei der Art der Objekte in der Ergebnisliste sehen sie sind nicht vom Typ T (T werden verschiedene Klassen, die ich definiert), aber vom Typ com.google.gson.internal.LinkedTreeMap.
Weiß jemand warum? Und wie könnte ich es so machen, dass die zurückgegebene Liste vom Typ T ist?
Ausgezeichnete Antwort danke. Ich bin neu in der Arbeit mit Generika, also bin ich mir nicht sicher, was Löschung ist, aber ich werde das überprüfen. – dragosb
Es bedeutet im Grunde, dass Sie zur Laufzeit nicht auf 'T' zugreifen können, weil Generika implementiert sind. Siehe https://docs.oracle.com/javase/tutorial/java/generics/erasure.html –