Sobes.tech
Middle

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 :

  1. Utiliser la classe TypeToken ou des constructions similaires : Lors de la création d’une instance d’une classe générique, vous pouvez passer un objet Class<T> ou utiliser une sous-classe anonyme pour conserver l’information sur le type.

  2. 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.