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:
-
Použití třídy
TypeTokennebo podobných konstrukcí: Při vytváření instance generické třídy lze předat objektClass<T>nebo použít anonymní podtřídu k zachování informace o typu. -
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í.