Sobes.tech
Middle

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:

  1. Verwendung der Klasse TypeToken oder ähnlicher Konstruktionen: Beim Erstellen einer Instanz einer generischen Klasse kann ein Objekt Class<T> übergeben oder eine anonyme Unterklasse verwendet werden, um die Typinformation zu bewahren.

  2. 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.