Ako určiť typ parametra používaného v generickej triede počas behu programu?
sobes.tech AI
Odpoveď od AI
V Jave, kvôli vymazaniu typov (type erasure) počas kompilácie, informácie o typoch generických tried sa neuchovávajú v bajtkóde, takže nie je možné priamo určiť typ parametra počas behu.
Existuje však niekoľko spôsobov, ako tieto informácie získať:
-
Použitie triedy
TypeTokenalebo podobných konštrukcií: Pri vytváraní inštancie generickej triedy môžete odovzdať objektClass<T>alebo použiť anonymnú podtriedu na zachovanie informácie o type. -
Reflexia pomocou
ParameterizedType: Ak generická trieda uchováva informácie o type v poli alebo konštruktore, je možné ich získať pomocou reflexie.
Príklad s odovzdaní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 parametra: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Vypíše: Typ parametra: java.lang.String
Preto je zvyčajne potrebné, aby ste typ parametra pri behu explicitne odovzdali alebo ho uložili, pretože štandardné mechanizmy Javy to neumožňujú kvôli vymazaniu typov.