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 ...)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
public class GenericClass {
}
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
4
5
6
7
8
 
public class SpecifClass1 extends GenericClass {
}
 
public class SpecifClass2 extends 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).
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
Map<String,Class<GenericClass>> assoStringClass ;
que je remplis de la sorte a la construction
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) ;
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.

L'idée étant ensuite d'instancier le bon Spécifique en fonction d'une égalité entre 2 String :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
if(assoStringClass.containsKey(maChaineParam) {
     GenericClass = assoStringClass.get(maChaineParam).newInstance();
Des idées pour faire fonctionner tout ça ?