Cum se poate determina tipul parametrului utilizat într-o clasă generică în timpul execuției?
sobes.tech AI
Răspuns de la AI
În Java, din cauza ștergerii tipurilor (type erasure) în timpul compilării, informațiile despre tipurile parametrilor generici nu sunt păstrate în bytecode, așa că nu este posibil să se determine direct tipul parametrului în timpul execuției.
Cu toate acestea, există mai multe modalități de a obține aceste informații:
-
Utilizarea clasei
TypeTokensau a construcțiilor similare: La crearea unei instanțe a unei clase generice, se poate transmite un obiectClass<T>sau se poate folosi o subclasă anonimă pentru a păstra informația despre tip. -
Reflecție folosind
ParameterizedType: Dacă clasa generică păstrează informația despre tip într-un câmp sau constructor, se poate accesa prin reflecție.
Exemplu cu transmiterea Class<T>:
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Tipul parametrului: " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Va afișa: Tipul parametrului: java.lang.String
Prin urmare, pentru a determina tipul parametrului în timpul execuției, de obicei este necesar să îl transmiteți sau să îl păstrați explicit, deoarece mecanismele standard ale Java nu permit obținerea sa din cauza ștergerii tipurilor.