Problème avec ArrayList

Problème avec ArrayList - Java - Programmation

Marsh Posté le 04-02-2006 à 15:59:46    

Bonjour,
 
 
Je possède une classe personne et une classe Annuaire.
La classe Personne contient les attributs : nom, prénom et tel, toute simple.
Dans ma classe Annuaire, j'ai crée un tableau de personne :
private ArrayList liste;
 
Quand j'écris :
Personne pers = new Personne();
pers = liste.get(i);
il me met type incompatible et je ne comprend pas pourquoi.
 
Alors que quand je veux remplacer un élément du tableau, le type personne ne le dérange pas :
liste.set(index,pers);
 
Merci d'avance pour votre aide

Reply

Marsh Posté le 04-02-2006 à 15:59:46   

Reply

Marsh Posté le 04-02-2006 à 16:01:53    

bah tu cast

Reply

Marsh Posté le 04-02-2006 à 16:02:32    

désolé mais je ne comprends pas... débutante...

Reply

Marsh Posté le 04-02-2006 à 16:04:34    

en java 1.4, les java.util.* ne gèrent que des Object bruts.
 
Object List.get(int i);
 
donc faut caster
 
Personne p = (Personne)liste.get(0);
 
bienvenue dans le typage de merde de java.

Reply

Marsh Posté le 04-02-2006 à 16:05:05    

ah ok, merci

Reply

Marsh Posté le 04-02-2006 à 16:25:30    

comme précédemment dit, la méthode get() te renvoie un Object. bah oui, car les ArrayList c'est pour mettre n'importe quel type d'objet dans une liste de taille dynamique. donc les méthodes donnant accès aux éléments de la liste renvoient des objet.
il faut donc transtyper (= caster), mais c'est pas genant dans la mesure où tu sais que ta ArrayList contient bien le type avec lequel tu castes

Reply

Marsh Posté le 04-02-2006 à 18:02:56    

moi je dirais que c'est génant parce que je sais parfaitement ce qu'il y a dedans.

Reply

Marsh Posté le 04-02-2006 à 18:07:15    

et en java 1.5, en utilisant les types générics ca donnera ça :  
 

Code :
  1. private List<Personne> liste;  // tant qu'à faire, autant déclarer sous forme de List plutôt qu'ArrayList


 

Code :
  1. // l'initialisation de la liste se ferra comme ça :  
  2. liste = new ArrayListe<Personne>();
  3. // et ton code :  
  4. Personne pers; // ca sert à rien de créer un new Personne puisque tu t'en sers pas
  5. pers = liste.get(i); // maintenant ca marche vu que java sait que ta liste contient des Personne
  6. liste.set(index,pers); // ça ca marche comme avant ...


Message édité par benou le 04-02-2006 à 18:07:28
Reply

Marsh Posté le 04-02-2006 à 19:10:25    

et puis un beau jour tu veux faire un liste.toArray() et paf, il faut recaster ...

Reply

Marsh Posté le 04-02-2006 à 20:39:03    

Taz a écrit :

et puis un beau jour tu veux faire un liste.toArray() et paf, il faut recaster ...


trop dur ...

Reply

Marsh Posté le 04-02-2006 à 20:39:03   

Reply

Marsh Posté le 04-02-2006 à 20:54:41    

(et euh, non, faut pas)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-02-2006 à 20:55:08    

(et accessoirement, Taz, ton opinion, on s'en bat les couilles, spécialement sur ce genre de topic, ou c'est completement hs)


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-02-2006 à 21:47:59    

tiens tu vois, toi aussi tu en donnes une.

Reply

Marsh Posté le 04-02-2006 à 21:55:45    

Ah ben oui mais -- la cat java c'est chez lui, toi c'est la cat c++, donc il a le droit et toi pas [:klem3i1]


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

Marsh Posté le 04-02-2006 à 21:56:50    

[:icon5]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 04-02-2006 à 22:04:27    

C'est juste que récemment, j'ai fait des développements en java 1.5, et j'ai été surpris par certains "trous" dans les nouvelles API avec contraintes de type. De même que je n'ai pas compris pourquoi certains warnings/erreurs sont désactivés par défaut ... d'habitude la moindre broutille et javac refuse de compiler. Là, avec les contraintes de type, on peut faire faire bouffer absolument n'importe quoi tant qu'on active pas -Xlint:unchecked. Mais bon, c'est quand même un mieux.

Reply

Sujets relatifs:

Leave a Replay

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