Factory avec classe comme parametre

Fermé
rompelstilchen2 Messages postés 5 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 27 février 2015 - 26 févr. 2015 à 18:09
KX Messages postés 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 - 27 févr. 2015 à 13:35
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
26 févr. 2015 à 19:34
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 dimanche 28 avril 2013 Statut Membre Dernière intervention 27 février 2015
26 févr. 2015 à 20:26
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020 > rompelstilchen2 Messages postés 5 Date d'inscription dimanche 28 avril 2013 Statut Membre Dernière intervention 27 février 2015
26 févr. 2015 à 20:41
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 dimanche 28 avril 2013 Statut Membre Dernière intervention 27 février 2015
27 févr. 2015 à 11:30
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 16755 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 12 février 2025 3 020
27 févr. 2015 à 13:35
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