Jak można określić typ parametru używanego w ogólnej klasie podczas działania programu?
sobes.tech AI
Odpowiedź od AI
W Javie, z powodu wymazywania typów (type erasure) podczas kompilacji, informacje o typach parametrów generycznych nie są przechowywane w kodzie bajtowym, więc nie można bezpośrednio określić typu parametru w czasie wykonywania.
Istnieje jednak kilka sposobów uzyskania tych informacji:
-
Użycie klasy
TypeTokenlub podobnych konstrukcji: Podczas tworzenia instancji klasy generycznej można przekazać obiektClass<T>lub użyć anonimowej podklasy, aby zachować informacje o typie. -
Refleksja z użyciem
ParameterizedType: Jeśli klasa generyczna przechowuje informacje o typie w polu lub konstruktorze, można uzyskać je przez refleksję.
Przykład z przekazaniem 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(); // Wyświetli: Typ parametru: java.lang.String
Zatem, aby określić typ parametru w czasie wykonywania, zazwyczaj trzeba go jawnie przekazać lub przechowywać, ponieważ standardowe mechanizmy Javy nie pozwalają go uzyskać z powodu wymazywania typów.