[Java] Recuperer le type de l'objet d'une Arraylist

Recuperer le type de l'objet d'une Arraylist [Java] - Java - Programmation

Marsh Posté le 29-05-2008 à 15:47:45    

Bonjour,
 
J'ai un probleme qui paraitra probablement stupdie a la majorite d'entre vous, mais apres recherche sur le forum et sur google, je n'ai pas réussi à trouver la solution.
 
J'ai une Arraylist de plusieurs types differents d'objets, et au moment de les recuperer pour les exploiter, je n'arrive pas a savoir comment recuperer le type de l'objet que j'ai recuperé avec mon iterateur.
 
En effet j'aimerais avoir ca:
 

Code :
  1. while (it.hasNext())
  2.  {
  3.   if ("La classe de cet objet est de type Triangle) {Faire tout ce pavé}
  4.                         if ("La classe de cet objet est de type Carré) {Faire tout ce pavé}


 
La seule solution que j'ai trouver c'est d'utiliser la methode Iterator.toString, qui renvoie "Carre@2a4b56", de recuperer les premiers caracteres, et de le comparer avec le type de la classe.
 
C'est assez moche, et je pense bien qu'il y a bien mieux a faire, non ?
 
Merci d'avance !


Message édité par bubqr le 29-05-2008 à 15:48:35
Reply

Marsh Posté le 29-05-2008 à 15:47:45   

Reply

Marsh Posté le 29-05-2008 à 16:05:27    

isinstance
 
Et accessoirement, devoir utiliser ce genre de trucs est 90% du temps un signe que ton design est franchement mauvais.


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-05-2008 à 16:56:53    

Essaye comme ca:
 

Code :
  1. while(it.hasNext()) {
  2.   Object o = it.next();
  3.   if(o instanceof Triangle) {
  4.     Triangle t = (Triangle)o;
  5.     // blabla
  6.   } else if(o instanceof Carre) {
  7.     Carre c = (Carre)o;
  8.     // blabla
  9.   }
  10. }


Sinon +1 avec Masklinn, essaye de factoriser tes classes Triangle et Carre afin de n'appeler que des methodes communes aux deux classes dans ton itération.


---------------
Light is right
Reply

Marsh Posté le 29-05-2008 à 17:25:22    

nerisson a écrit :

Sinon +1 avec Masklinn, essaye de factoriser tes classes Triangle et Carre afin de n'appeler que des methodes communes aux deux classes dans ton itération.


Non mais de toute façon pour bosser proprement si il utilise les generics il a déjà une interface ou une superclasse commune

Spoiler :

d'un autre côté, s'il utilise les iterators manuellement de cette manière je doute qu'il code en java5 [:sadnoir]


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-05-2008 à 17:30:19    

Concretement, je gere un Zoo, j'ai des cages normales, et des classes derivées comme par exemple Cage pour robots. Je veux faire une seule et même liste de cages, sans differencier les differents types de cages. Mais lors du parcours de cette liste, pour afficher les cages et leurs contenus, je dois bien caster les differents objets que je recupere non ?
Ou alors il existe une autre methode ?

Reply

Marsh Posté le 29-05-2008 à 17:44:50    

http://www.deitel.com/articles/jav [...] erics.html


---------------
Stick a parrot in a Call of Duty lobby, and you're gonna get a racist parrot. — Cody
Reply

Marsh Posté le 29-05-2008 à 19:26:49    

Autant pour moi je croyais que si on ne precisait pas le type de l'objet recupere, on ne pouvait utiliser que des methodes de la classe Object, et donc pas les methodes generiques. Désolé, merci !

Reply

Marsh Posté le 29-05-2008 à 22:30:34    

bubqr a écrit :

Concretement, je gere un Zoo, j'ai des cages normales, et des classes derivées comme par exemple Cage pour robots. Je veux faire une seule et même liste de cages, sans differencier les differents types de cages. Mais lors du parcours de cette liste, pour afficher les cages et leurs contenus, je dois bien caster les differents objets que je recupere non ?
Ou alors il existe une autre methode ?


La classe mère (Cage) possède une méthode réalisant ce que tu veux faire (en l'occurrence, afficher son contenu).
Les classes filles (CageRobot, ...) redéfinissent cette méthode à leur convenance.
 
Dans ton parcours avec l'iterator, tu castes en la classe mère (Cage) ce que renvoie next().


Message édité par charly007 le 29-05-2008 à 22:31:15
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed