Kako odrediti tip parametra koji se koristi u generičkoj klasi tokom izvršavanja programa?
sobes.tech АИ
Одговор од АИ
U Javi, zbog brisanja tipova (type erasure) tokom kompilacije, informacije o tipovima generičkih klasa ne ostaju sačuvane u bajt kodu, pa nije moguće direktno odrediti tip parametra u toku izvršavanja.
Međutim, postoji nekoliko načina da se ove informacije dobiju:
-
Korišćenje klase
TypeTokenili sličnih konstrukcija: Prilikom kreiranja instance generičke klase, može se proslediti objekatClass<T>ili koristiti anonimnu podklasu za očuvanje informacije o tipu. -
Refleksija pomoću
ParameterizedType: Ako generička klasa čuva informaciju o tipu u polju ili konstruktoru, može se pristupiti putem refleksije.
Primer sa prosleđivanjem Class<T>:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Tip parametra: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Ispisaće: Tip parametra: java.lang.String
Dakle, da biste odredili tip parametra u toku izvršavanja, obično je potrebno da ga eksplicitno prosledite ili sačuvate, jer standardni mehanizmi Jave to ne omogućavaju zbog brisanja tipova.