Sobes.tech
Middle

Jak lze určit typ parametru používaného v generické třídě během běhu programu?

sobes.tech AI

Odpověď od AI

V jazyce Java se kvůli vymazání typů (type erasure) během kompilace informace o typech parametrů generických tříd neukládají do bytekódu, takže není možné přímo určit typ parametru za běhu.

Existuje však několik způsobů, jak tyto informace získat:

  1. Použití třídy TypeToken nebo podobných konstrukcí: Při vytváření instance generické třídy lze předat objekt Class<T> nebo použít anonymní podtřídu k zachování informace o typu.

  2. Reflexe s využitím ParameterizedType: Pokud generická třída uchovává informaci o typu v poli nebo konstruktoru, lze ji získat pomocí reflexe.

Příklad s předáním 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 parametru: " + type.getName());
    }
}

GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Vypíše: Typ parametru: java.lang.String

Proto je obvykle nutné typ parametru při běhu výslovně předat nebo uložit, protože standardní mechanismy jazyka Java to kvůli vymazání typů neumožňují.