2 votes

Obtenir la classe de type générique dans la superclasse avec GWT

J'ai une super-classe générique de client GWT SuperClass<T> . Il existe des sous-classes qui définissent explicitement le type générique, par exemple SubClass extends SuperClass<String> etc. J'ai besoin d'obtenir le type de classe générique dans la super-classe, quelque chose comme T.class (bien sûr, ça ne marche pas, mais j'espère que vous comprenez l'idée).

J'ai donc fini par créer une méthode Class<T> getClassType() dans la super-classe. Dans les sous-classes, je le remplace par ce qui suit :

@Override    
protected Class<String> getClassType(){    
 return String.class;    
}

Bien que cela fonctionne, je n'aime pas cette approche car je dois définir explicitement le type plusieurs fois. Je cherche une solution de contournement pour pouvoir écrire moins de code dans les sous-classes.

Du côté serveur, je peux utiliser la réflexion, mais du côté client, elle n'est pas disponible.

J'ai vu quelques conseils sur l'utilisation des générateurs mais je ne vois pas vraiment comment cela peut aider ici.

0voto

darijan Points 6139

Je le passerais dans le constructeur :

public class SuperClass<T> {

    private Class<T> type;

    public SuperClass (Class<T> type) {
        this.type= type;
    }

    public void Class<T> getClassType() {
        return type;
    }
}

Il existe des bibliothèques tierces pour cela : https://github.com/jhalterman/typetools

Il n'y a pas d'autre moyen de l'obtenir dans le temps de fonctionnement parce que génériques java sont un temps de compilation fonction.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X