Comment peut-on déterminer le type de paramètre utilisé dans une classe générique lors de l'exécution?
sobes.tech IA
Réponse de l'IA
En Java, en raison de l’effacement des types (type erasure) lors de la compilation, l’information sur les types des paramètres génériques n’est pas conservée dans le bytecode, il n’est donc pas possible de déterminer directement le type du paramètre à l’exécution.
Cependant, il existe plusieurs méthodes pour obtenir cette information :
-
Utiliser la classe
TypeTokenou des constructions similaires : Lors de la création d’une instance d’une classe générique, vous pouvez passer un objetClass<T>ou utiliser une sous-classe anonyme pour conserver l’information sur le type. -
Réflexion avec
ParameterizedType: Si la classe générique conserve l’information sur le type dans un champ ou un constructeur, vous pouvez y accéder via la réflexion.
Exemple avec transmission de Class<T> :
public class GenericClass<T> {
private Class<T> type;
public GenericClass(Class<T> type) {
this.type = type;
}
public void printType() {
System.out.println("Type du paramètre : " + type.getName());
}
}
GenericClass<String> instance = new GenericClass<>(String.class);
instance.printType(); // Affichera : Type du paramètre : java.lang.String
Ainsi, pour déterminer le type du paramètre à l’exécution, il faut généralement le passer ou le conserver explicitement, car les mécanismes standards de Java ne permettent pas de l’obtenir en raison de l’effacement des types.