Heim > Java > javaLernprogramm > Wie kann ich mithilfe von Reflection generische Parametertypen in Java abrufen?

Wie kann ich mithilfe von Reflection generische Parametertypen in Java abrufen?

Mary-Kate Olsen
Freigeben: 2024-12-31 20:09:10
Original
801 Leute haben es durchsucht

How Can I Get Generic Parameter Types in Java Using Reflection?

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>());
    }
}
Nach dem Login kopieren

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];
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage