Bei der objektorientierten Programmierung ist häufig die Bestimmung der Klasse eines generischen Typs erforderlich. Bei der Verwendung generischer Klassen wird diese Aufgabe jedoch aufgrund der Typlöschung zur Laufzeit zu einer Herausforderung.
Betrachten Sie das folgende Beispiel, in dem MyGenericClass versucht, mithilfe einer Drittanbieterbibliothek eine Instanz vom Typ T zu erstellen:
public class MyGenericClass<T> { public void doSomething() { // Create an instance of class T T bean = (T)someObject.create(T.class); } }
Dieser Ansatz schlägt mit dem Fehler „Ungültiges Klassenliteral für den Typparameter T“ fehl. Um dieses Problem zu beheben, besteht eine übliche Problemumgehung darin, den Typ T als Parameter an eine statische Methode zu übergeben:
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() { // Create an instance of class T T instance = clazz.newInstance(); } }
Durch explizite Übergabe der Klasse T kann der Code erfolgreich eine Instanz des gewünschten Typs erstellen. Obwohl diese Methode nicht so elegant ist wie ein direkter Methodenaufruf, bietet sie eine zuverlässige Lösung zur Bestimmung der Klasse eines generischen Typs.
Das obige ist der detaillierte Inhalt vonWie bestimmt man die Klasse eines generischen Typs in generischen Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!