Wie kann man den Typ eines in einer generischen Klasse verwendeten Parameters zur Laufzeit bestimmen?
sobes.tech KI
Antwort von AI
In Java, aufgrund des Tyrausschmisse (type erasure) während der Kompilierung werden Informationen über die Typen der Parameter generischer Klassen nicht im Bytecode gespeichert, daher ist es nicht möglich, den Typ des Parameters zur Laufzeit direkt zu bestimmen.
Es gibt jedoch mehrere Möglichkeiten, diese Informationen zu erhalten:
-
Verwendung der Klasse
TypeTokenoder ähnlicher Konstruktionen: Beim Erstellen einer Instanz einer generischen Klasse kann ein ObjektClass<T>übergeben oder eine anonyme Unterklasse verwendet werden, um die Typinformation zu bewahren. -
Reflexion mit
ParameterizedType: Wenn die generische Klasse die Typinformation in einem Feld oder Konstruktor speichert, kann diese durch Reflexion abgerufen werden.
Beispiel mit Übergabe von Class<T>:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Typ des Parameters: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Gibt aus: Typ des Parameters: java.lang.String
Daher ist es in der Regel notwendig, den Typ explizit zu übergeben oder zu speichern, um ihn zur Laufzeit zu bestimmen, da die Standardmechanismen von Java dies aufgrund des Tyrausschmisses nicht zulassen.