Kaip galima nustatyti bendrojoje klasėje naudojamo parametro tipą vykdymo metu?
sobes.tech AI
Atsakymas iš AI
Java kalboje, dėl tipų ištrynimo (type erasure) kompilacijos metu, informacija apie generinių klasių parametrų tipus nėra saugoma baitkodo faile, todėl tiesiogiai nustatyti parametro tipą vykdymo metu nėra įmanoma.
Tačiau yra keletas būdų gauti šią informaciją:
-
Naudoti
TypeTokenklasę arba panašias konstrukcijas: Kurdami generinės klasės egzempliorių, galite perduotiClass<T>objektą arba naudoti anonimines pogrupes, kad išsaugotumėte tipo informaciją. -
Refleksija naudojant
ParameterizedType: Jei generinė klasė saugo tipo informaciją lauke ar konstruktoriuje, ją galima pasiekti per refleksiją.
Pavyzdys su Class<T> perdavimu:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Parametro tipas: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Išves: Parametro tipas: java.lang.String
Taigi, norint nustatyti parametro tipą vykdymo metu, dažniausiai reikia jį perduoti arba aiškiai išsaugoti, nes standartiniai Java mechanizmai to neleidžia dėl tipų ištrynimo.