Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1667 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] Extraire un sous-type d'une arrayList

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[RESOLU] Extraire un sous-type d'une arrayList

n°2086560
Facewindu
Posté le 01-07-2011 à 21:17:58  profilanswer
 

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
mood
Publicité
Posté le 01-07-2011 à 21:17:58  profilanswer
 

n°2086645
Facewindu
Posté le 02-07-2011 à 14:12:42  profilanswer
 

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 :)

n°2086646
kadreg
profil: Utilisateur
Posté le 02-07-2011 à 14:23:52  profilanswer
 

bah pourquoi du veux pas d'instance of :??: c'est fait pour ça :o


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°2086655
Facewindu
Posté le 02-07-2011 à 14:54:46  profilanswer
 

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

n°2086659
kadreg
profil: Utilisateur
Posté le 02-07-2011 à 15:15:06  profilanswer
 

Code :
  1. for (A a : list) {
  2.   try {
  3.    B b = (B) a;
  4.    b.execute();
  5.   } catch (ClassCastException e) {}
  6.  }


 
:whistle:


---------------
brisez les rêves des gens, il en restera toujours quelque chose...  -- laissez moi troller sur discu !
n°2086661
zapan666
Tout est relatif
Posté le 02-07-2011 à 15:23:10  profilanswer
 

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.
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


C'est pas loin du pattern visiteur :
 

Code :
  1. class B extends A {
  2.   Public void filtre(list l){
  3.          L.add(this)
  4. }
  5. }


---------------
my flick r - Just Tab it !
n°2086664
Facewindu
Posté le 02-07-2011 à 15:37:32  profilanswer
 

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 ;)


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  [RESOLU] Extraire un sous-type d'une arrayList

 

Sujets relatifs
[OCAML] question sur un typeCommande awk pour extraire des blocs d'un fichier + regexp sur lignes
Typer un objet de type variableLire un fichier text et extraire les caracteres 25 a 37 de chaque lign
Extraire un mot d'une ligne suivant ce qui l'encadreProblème incompatibilité type Excel VBA (Help, Stagiaire en détresse!)
[RESOLU]Quel type de jointure pour ceci ?' ' does not name a type
CREATION Macro CATIA sous UNIX type .CATVBAextraire un champ dans un paquet RTP
Plus de sujets relatifs à : [RESOLU] Extraire un sous-type d'une arrayList


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR