Heim >Java >javaLernprogramm >Wie kann ich die Klasse eines generischen Typs zur Laufzeit bestimmen?
Klasse eines generischen Typs bestimmen
Bei der generischen Programmierung ist es oft wünschenswert, auf die Klasse des verwendeten generischen Typs zuzugreifen. Allerdings werden generische Typinformationen zur Laufzeit gelöscht, was diese Aufgabe grundsätzlich zu einer Herausforderung macht. In diesem Artikel wird eine effektive Problemumgehung zur Überwindung dieser Einschränkung untersucht.
Die Herausforderung
Beachten Sie den folgenden Codeausschnitt:
public class MyGenericClass<T> { public void doSomething() { T bean = (T)someObject.create(T.class); } }
Dieser Code versucht dies Erstellen Sie eine Instanz vom Typ T mithilfe der Methode „create“ einer Drittanbieterbibliothek, die die tatsächliche Klasse von T als Argument erfordert. Der direkte Zugriff auf T.class führt jedoch zu einem Fehler „Ungültiges Klassenliteral für Typparameter T“.
Die Problemumgehung
Da generische Typinformationen zur Laufzeit gelöscht werden, ist dies eine Alternative Ansatz ist notwendig. Die folgende Problemumgehung umfasst das Erstellen einer statischen Factory-Methode, die die Klasse des generischen Typs als Argument akzeptiert:
public class MyGenericClass<T> { private final Class<T> clazz; public static <U> MyGenericClass<U> createMyGeneric(Class<U> clazz) { return new MyGenericClass<U>(clazz); } protected MyGenericClass(Class<T> clazz) { this.clazz = clazz; } public void doSomething() { T instance = clazz.newInstance(); } }
Verwendung
Um diese Problemumgehung zu verwenden, erstellen Sie eine Instanz von MyGenericClass mithilfe der Factory-Methode createMyGeneric:
MyGenericClass<MyClass> genericInstance = MyGenericClass.createMyGeneric(MyClass.class);
Dies ermöglicht den Zugriff auf die tatsächliche Klasse des generischen Typs über die clazz-Feld innerhalb der MyGenericClass-Instanz.
Nachteile
Diese Problemumgehung ist zwar funktionsfähig, fügt der Lösung jedoch einige Standardcodes hinzu. Darüber hinaus wird die Verwendung generischer Methoden oder Konstruktoren innerhalb der doSomething-Methode eingeschränkt, da diese nicht direkt auf die generischen Typinformationen zugreifen können.
Das obige ist der detaillierte Inhalt vonWie kann ich die Klasse eines generischen Typs zur Laufzeit bestimmen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!