Factory avec classe comme parametre

rompelstilchen2 Messages postés 5 Statut Membre -  
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

2 réponses

  1. KX Messages postés 19031 Statut Modérateur 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
    1. rompelstilchen2 Messages postés 5 Statut Membre
       
      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
      1. KX Messages postés 19031 Statut Modérateur 3 020 > rompelstilchen2 Messages postés 5 Statut Membre
         
        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
  2. rompelstilchen2 Messages postés 5 Statut Membre
     
    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
    1. KX Messages postés 19031 Statut Modérateur 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