Heim  >  Artikel  >  Java  >  Wie bestimme ich die Klasse eines generischen Typs in Java?

Wie bestimme ich die Klasse eines generischen Typs in Java?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-15 22:18:02142Durchsuche

How to Determine the Class of a Generic Type in Java?

Bestimmen der Klasse eines generischen Typs: Erkunden von Alternativen

Im Bereich der generischen Programmierung ist es oft entscheidend, die spezifische Klasse des aktuellen generischen Typs zu bestimmen verwenden. Allerdings stellt der generische Typlöschmechanismus von Java eine Herausforderung für dieses Unterfangen dar.

Um dieses Problem anzugehen, schauen wir uns ein Beispiel an, das ein reales Szenario nachahmt:

public class MyGenericClass<T> {
  public void doSomething() {
    // Imagine a 3rd party library call that expects a Class object
    T bean = (T) someObject.create(T.class);
  }
}

Leider ist das Der obige Code schlägt mit der Fehlermeldung „Ungültiges Klassenliteral für den Typparameter T“ fehl. Dies liegt daran, dass generische Typinformationen zur Laufzeit gelöscht werden, was die direkte Verwendung von T.class unmöglich macht.

Wie können wir also dieses Hindernis überwinden? Als praktikable Lösung erwies sich ein Workaround: die Einführung einer statischen Factory-Methode, die die gewünschte Klasse als Parameter akzeptiert.

public class MyGenericClass<T> {

  private final Class<T> clazz;

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

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

  public void doSomething() {
    T instance = clazz.newInstance();
  }
}

Dieser Ansatz ermöglicht es Ihnen, die generische Klasse während der Objekterstellung explizit anzugeben und so das Löschen zur Laufzeit effektiv zu umgehen Ausgabe. Es hat jedoch einen Nachteil: Es fügt Standardcode hinzu und verkompliziert die API etwas. Dennoch bleibt es ein effektiver Workaround, wenn die Bestimmung des Klassentyps unabdingbar ist.

Das obige ist der detaillierte Inhalt vonWie bestimme ich die Klasse eines generischen Typs in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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