Übergabe einer Klasse mit Typparameter als Typparameter für eine generische Methode in Java

Problemzusammenfassung: Ich möchte eine Klasse mit einem Typparameter übergeben (zBArrayList<SomeClass>B. auf eine generische Methode als Typparameter.

Angenommen, ich habe eine Methode:

    public static <T> T getGenericObjectFromJson(String json, Class<T> genericType){
        // details unimportant, basically returns an object of specified type
        return JsonParser.fromJson(json, genericType); 
    }

Diese Methode eignet sich natürlich für jede Art von Klasse. Ich kann die Methode wie folgt aufrufen:

getGenericObjectFromJson(jsonString, User.class)

Das Problem: Ich habe festgestellt, dass ich das nicht kann:

getGenericObjectFromJson(jsonString, ArrayList<User>.class)

Syntaktisch ist dies offensichtlich ungültig. Ich bin mir jedoch nicht sicher, wie ich so etwas überhaupt erreichen würde. Ich kann natürlich bestehenArrayList.classDurch das Hinzufügen des generischen Typs ist er jedoch syntaktisch nicht mehr gültig, und ich kann mir keine Lösung vorstellen.

Die einzige direkte Lösung war so etwas (was ziemlich doof zu sein scheint):

getGenericObjectFromJson(jsonString, new ArrayList<User>().getClass())

Am Ende verlieren wir jedoch den generischen Typ und erhalten lediglich eine ArrayList unbekannten Typs zurück (obwohl sie umgewandelt werden kann). Außerdem wird ein Objekt unnötigerweise instanziiert.

Bisher bestand meine einzige Lösung darin, diese Methode in eine Klasse zu packen, die einen generischen Typparameter enthält, der wie folgt instanziiert werden kann:

public class JsonDeserializer<T>...

In diesem Fall ist diegetGenericObjectFromJson Methode verwendet den generischen Typ der Klasse.

Die Fragen): Letztendlich bin ich neugierig, warum ich keine Klasse mit einem Typparameter übergeben kann UND ob es eine Möglichkeit gibt, das zu erreichen, was ich versucht habe.

Lassen Sie mich wie immer wissen, wenn es Probleme mit dieser Frage gibt.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage