Heim > Java > javaLernprogramm > Wie können Sie die Klasse eines generischen Typs zur Laufzeit bestimmen?

Wie können Sie die Klasse eines generischen Typs zur Laufzeit bestimmen?

Mary-Kate Olsen
Freigeben: 2024-11-19 02:12:02
Original
521 Leute haben es durchsucht

How Can You Determine the Class of a Generic Type at Runtime?

Bestimmen der Klasse eines generischen Typs

Im Bereich der generischen Programmierung kann es zwingend erforderlich sein, die Klasse des generischen Typs zu ermitteln ausgenutzt wird. Allerdings werden Typinformationen, wie es in der Natur von Generika liegt, typischerweise zur Laufzeit gelöscht, was eine Herausforderung beim späteren Abrufen darstellt.

Beispiel:

Betrachten Sie das folgende Generic Klasse:

public class MyGenericClass<T> {
  public void doSomething() {
    // ...
    T bean = (T)someObject.create(T.class);
    // ...
  }
}
Nach dem Login kopieren

Im obigen Beispiel versuchen wir, eine Instanz der Klasse T zu erstellen, indem wir ein Klassenliteral übergeben. Dies führt jedoch zu einem Fehler „Ungültiges Klassenliteral für den Typparameter T“, da der Versuch, den generischen Typ als Klassenliteral zu verwenden, verboten ist.

Problemumgehung:

Um diese Herausforderung zu meistern, besteht eine praktikable Lösung darin, die Klasse des generischen Typs als Parameter an eine statische Methode zu übergeben. Diese Methode verwendet dann die Reflection-API, um den generischen Typ zu instanziieren.

public class MyGenericClass<T> {

    private final Class<T> clazz;

    public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) {
        return new MyGenericClass<>(clazz);
    }

    protected MyGenericClass(Class<T> clazz) {
        this.clazz = clazz;
    }

    public void doSomething() {
        T instance = clazz.newInstance();
    }
}
Nach dem Login kopieren

Durch diesen Ansatz umgehen wir die Einschränkung gegen die Verwendung generischer Typen als Klassenliterale und stellen so sicher, dass die erforderlichen Typinformationen zur Laufzeit verfügbar sind . Obwohl dies eine unelegante Lösung sein mag, bietet sie eine Möglichkeit, die Klasse eines generischen Typs in einem anspruchsvollen Kontext wie dem im ursprünglichen Beispiel dargestellten zu bestimmen.

Das obige ist der detaillierte Inhalt vonWie können Sie die Klasse eines generischen Typs zur Laufzeit bestimmen?. 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