Bonjour,
je rencontre un petit soucis Java autour de l'héritage, généricité et de l'utilisation des outils de réflexion/introspection java.
Le problème se pose aussi bien avec l'utilsation d'une interface ou d'une classe mère pour la généricité. Voici le problème
J'ai donc une classe générique (ou une interface ...)
et des implémentation différentes de cette classe générique :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 public class GenericClass { }
Pour un besoin particulier dans une factory, j'ai besoin d'instancier un nouvel objet spécifique en fonction d'un élément (ici une String passé en paramètre).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 public class SpecifClass1 extends GenericClass { } public class SpecifClass2 extends GenericClass { } ...
Pour faire "élégant" et éviter une enorme imbrication de if,else if ... je voudrais créer une Map du type qui contiendrai de façon générique mes associations.
que je remplis de la sorte a la construction
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Map<String,Class<GenericClass>> assoStringClass ;
Seulement ici il me sort une erreur car pour lui Class<SpecifClass1> (donc issu de mon put) ou Class<SpecifClass2> ne peut pas être mis ds HashMap<String,Class<GenericClass>> malgrès le lien entre GenericClass et les specif class.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 assoStringClass = new HashMap<String,Class<GenericClass>> ; assoStringClass.put("chaine1",SpecifClass1.class) ; assoStringClass.put("chaine2",SpecifClass2.class) ;
L'idée étant ensuite d'instancier le bon Spécifique en fonction d'une égalité entre 2 String :
Des idées pour faire fonctionner tout ça ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 if(assoStringClass.containsKey(maChaineParam) { GenericClass = assoStringClass.get(maChaineParam).newInstance();
Partager