Extraire un sous-type d'une arrayList [RESOLU] - Java - Programmation
Marsh Posté le 02-07-2011 à 14:12:42
Bon,
j'ai un moyen de faire autrement, car je peux extraire ma sous-liste à la création.
Lorsque je crée un objet B, je peux le mettre dans la liste globale "list", et aussi dans la liste secondaire "listB"
Idem pour les objets C.
Cette solution ne me plaît que moyennement, car je dois me trimballer mes trois listes lis, listB, listC.
Je cherchais une manière élégante qui me permette de ne bosser qu'avec la liste globale "list".
Si personne ne trouve, tant pis, c'est pas la mort
Marsh Posté le 02-07-2011 à 14:23:52
bah pourquoi du veux pas d'instance of c'est fait pour ça
Marsh Posté le 02-07-2011 à 14:54:46
Parce que instanceof est considéré comme du bad programming. Je lis partout que si on compte l'utiliser, c'est que le design est pas bon.
Mais là, je vois pas comment changer mon design.
Enfin, si, je vois bien un truc.
définir dans A les méthodes que je veux appliquer à mes objets B et C.
Et les surcharger dans B et C.
Du coup, je bosse avec ma list globale (qui contient des A, des B, et des C).
Un truc du genre :
class A {
execute(){
//rien du tout
}
}
class B extends A {
execute(){
ce que je veux faire avec les objets B
}
}
class C extends A{
execute(){
ce que je veux faire avec les objets C
}
}
Et ensuite quand j'ai ma liste globale, je fais execute() sur tous les éléments. SI c'est juste un A, il fait rien, si c'est un B ou un C il fait la methode exectue de B ou C
Marsh Posté le 02-07-2011 à 15:15:06
Code :
|
Marsh Posté le 02-07-2011 à 15:23:10
Facewindu a écrit : Parce que instanceof est considéré comme du bad programming. Je lis partout que si on compte l'utiliser, c'est que le design est pas bon. |
C'est pas loin du pattern visiteur :
Code :
|
Marsh Posté le 02-07-2011 à 15:37:32
Tout à fait, zapan666, c'est un Visitor pattern qu'il me faut
http://sourcemaking.com/design_patterns/visitor/java/1
Ca rajoute beaucoup de code, mais au moins c'est très propre.
Un désavantage que je lui trouve, c'est qu'il faut remplir l'interface Visitor avec des méthodes pour tous les éléments.
Donc si on rajoute un élément, il faut rajouter une méthode dans l'interface, et donc dans toutes les classes Operations qui implémentent cette interface Visitor.
Mais en tout cas, c'est ce que je recherche. Merci
Marsh Posté le 01-07-2011 à 21:17:58
Bonjour,
J'ai le problème suivant.
J'ai une super-classe A
Et deux classes : B extends A, et C extends A
J'ai ensuite une liste "list = new ArrayList<A>()", qui peut contenir des objets de type A, B ou C.
J'ai envie d'extraire de "list" une sous-liste listB qui ne contient que des éléments de type B.
Comment faire, sans utiliser l'operateur instanceof ?
merci !
Message édité par Facewindu le 02-07-2011 à 15:38:38