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!