si tu clones une ArrayList tu obtiens une deuxieme ArrayList qui reference les meme instances. Par contre certain element constitutif de l'ArrayList sont clon�s pour assurer que modifier le clone ( avec un add ou un remove par exemple) ne modifie pas l'instance d'origine
> -----Message d'origine----- > De : HAREL Anthony [mailto:[EMAIL PROTECTED] > Envoy� : jeudi 6 mars 2003 17:50 > � : [EMAIL PROTECTED] > Objet : Re: clonage d'objets > > > Ok, merci pour ces pr�cisions. > Par contre peux tu me dire ce qui se passe quand on appele la > methode clone sur > une ArrayList contenant des Objets que j'aurais d�finis? Ca > signifie que mes > Objets que je stocke dans des ArrayList que je veux pouvoir > cloner doivent �tre > cloneable? > > Herve AGNOUX a �crit : > > > Le Jeudi 6 Mars 2003 11:54, HAREL Anthony a �crit : > > > Que fait exactement la m�thode clone de la classe Object? > > > Si je veux pouvoir cloner un objet, faut-il que je sucharge la > > > methode clone() de mani�re a effectivement effectuer une copie > > > profonde de mon objet au lieu de copier des r�ferences? > > > > Pour une fois, Dieu soit lou�, la m�thode clone fait ce que > l'on croit qu'elle > > fait : un clone ! > > > > C'est � dire que l'objet d'origine et l'objet clon� ont > tous exactement les > > m�mes valeurs _ET LES MEMES REFERENCES_ d'attributs, seule > la r�f�rence de > > l'objet d'origine est diff�rente de celle de l'objet clon�. > Il est important > > de bien comprendre et de bien se rendre compte que les > attributs ne sont pas > > clon�s, du moins dans la m�thode fournie par java.lang.Object. > > > > Si tu veux pouvoir cloner un objet, il faut que tu lui refiles > > l'impl�mentation java.lang.Cloneable, et que tu utilises la > m�thode clone. Tu > > n'as besoin de surcharger cette m�thode que si tu veux la > rendre publique > > (elle est protected au d�part), ou si tu veux modifier le > comportement de > > clone. > > > > Modifier le comportement de clone est int�ressant si tu > veux cloner aussi les > > attributs, ce qui est souvent utile, bien que pas toujours > possible. Si tu le > > fait, dans ta nouvelle m�thode clone il faut toujours > appeler super.clone(), > > et travailler � partir de l'objet que te renvoie cet appel. > > > > Par exemple : > > > > class Z implements java.lang.Cloneable > > { > > Attribut nimportequoi; > > > > public Object clone() > > { > > Z z = (Z)super.clone(); > > z.nimportequoi = (Attribut)nimportequoi.clone(); > > return z; > > } > > } > > > > -- > > SARL diaam informatique - 04 50 32 59 84 > > Ingenierie, d�veloppements de syst�mes d'information > > http://www.diaam-informatique.com > > -- > _______________________________ > > Anthony HAREL > > > mailto:[EMAIL PROTECTED] > _______________________________ > >
