Factory avec classe comme parametre

rompelstilchen2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   -
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
A voir également:

2 réponses

KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Bonjour,

La méthode isAssignableFrom devrait faire ce que tu veux. C'est un peu le même principe que
instanceof
mais pour une classe.
0
rompelstilchen2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020 > rompelstilchen2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
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;
        // ...
    }
    // ...
}
0
rompelstilchen2 Messages postés 5 Date d'inscription   Statut Membre Dernière intervention  
 
d'accord mais comment eviter les branchements
a chaque nouvelle clase je devrai rajouter un test
je trouve ça limité pour du java.. non ?

--
0
KX Messages postés 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
Que ce soit en Java ou non, c'est ça le principe de la Factory...

http://fr.wikipedia.org/wiki/Fabrique_(patron_de_conception)
0