Factory avec classe comme parametre
rompelstilchen2
Messages postés
5
Statut
Membre
-
KX Messages postés 19031 Statut Modérateur -
KX Messages postés 19031 Statut Modérateur -
Bonjour,
j'essaye de creer une factory qui prend en parametre un type de classe
[code]
public PropControl Create(Class<? extends PropControl> cls)
{
if(cls==HouseControl.class) <---- ERROR
{
here I create a new instance of HouseControl (that inherits PropControl)
}
}
[/code]
j'ai cette erreur:
incomparable types: Class<CAP#1> and Class<HouseControl>
where CAP#1 is a fresh type-variable:
CAP#1 extends PropControl from capture of ? extends PropControl
ok je compare des types différents, mais comment je fais ?
merci
j'essaye de creer une factory qui prend en parametre un type de classe
[code]
public PropControl Create(Class<? extends PropControl> cls)
{
if(cls==HouseControl.class) <---- ERROR
{
here I create a new instance of HouseControl (that inherits PropControl)
}
}
[/code]
j'ai cette erreur:
incomparable types: Class<CAP#1> and Class<HouseControl>
where CAP#1 is a fresh type-variable:
CAP#1 extends PropControl from capture of ? extends PropControl
ok je compare des types différents, mais comment je fais ?
merci
2 réponses
-
Bonjour,
La méthode isAssignableFrom devrait faire ce que tu veux. C'est un peu le même principe queinstanceof
mais pour une classe.-
mon probleme etait que la classe HouseControl n'overidait pas la bonne classe, ça compile maintenant
mais invoke/instanceof est le signe d'une mauvaise implementation
ma factory doit aussi checker pour tous les cas de figures, c'est pas du tout OO- La combinaison invoke/instanceof est effectivement une mauvaise implémentation car ça t'oblige à créer un objet pour rien, mais isAssignableFrom est tout à fait pertinent pour une factory. Exemple :
public static <E> void example(Class<? extends Collection> collectionClass) { if (List.class.isAssignableFrom(collectionClass)) { Class<? extends List> listClass = (Class<? extends List>) collectionClass; // ... } if (Set.class.isAssignableFrom(collectionClass)) { Class<? extends Set> setClass = (Class<? extends Set>) collectionClass; // ... } // ... }
-
-
d'accord mais comment eviter les branchements
a chaque nouvelle clase je devrai rajouter un test
je trouve ça limité pour du java.. non ?
--