Generische Parametertypen in Java mithilfe von Reflection abrufen
In Java sind generische Typen eine leistungsstarke Funktion, die flexibleren und wiederverwendbaren Code ermöglicht. Allerdings kann die Arbeit mit generischen Parametern manchmal schwierig sein. Eine häufige Herausforderung besteht darin, den tatsächlichen Typ eines generischen Parameters zur Laufzeit zu bestimmen.
Ist das möglich?
Ja, es ist möglich, den Typ eines generischen Parameters zu ermitteln Reflexion nutzen. Reflection bietet eine Möglichkeit, zur Laufzeit auf Details zur Struktur, Feldern und Methoden einer Java-Klasse zuzugreifen und diese zu bearbeiten.
Beispiel:
Bedenken Sie den folgenden Codeausschnitt:
public class Voodoo { public static void chill(List<?> aListWithTypeSpiderMan) { // Here I'd like to get the Class-Object 'SpiderMan' Class typeOfTheList = ???; } public static void main(String... args) { chill(new ArrayList<SpiderMan>()); } }
Bei der Chill-Methode haben wir eine Liste unbekannter Typen. Wir möchten den tatsächlichen Typparameter ermitteln, der in diesem Fall SpiderMan sein sollte.
Lösung:
Die Lösung beinhaltet die Verwendung der ParameterizedType-Schnittstelle, die eine Art von ist Typ, der parametrisierte Typen beschreibt, beispielsweise solche, die Generika verwenden. So können wir das erreichen:
Class typeOfTheList = ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0];
Dieser Code ruft die Oberklasse der aktuellen Klasse (in diesem Fall Voodoo) ab, die ein parametrisierter Typ sein sollte, und extrahiert dann die tatsächlichen Typargumente. Das erste Typargument entspricht dem Typparameter, an dem wir interessiert sind, nämlich SpiderMan.
Hinweis:
Diese Technik wird vor Java 16 nicht vollständig unterstützt. Die Die Verwendung von Reflection für generische Typen galt früher als schwierig, aber ab Java 16 wurde getActualTypeArguments() zur Type-Schnittstelle hinzugefügt, was eine sauberere und optimiertere Möglichkeit bietet, auf generische Typen zuzugreifen Informationen.
Das obige ist der detaillierte Inhalt vonWie kann ich mithilfe von Reflection generische Parametertypen in Java abrufen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!