Clonage d'objets RESOLU - Java - Programmation
Marsh Posté le 30-08-2002 à 00:54:21
ben clonage de surface/profondeur non ? ('fin suivant les traductions)
c koi le probleme ? tu me le détailles ?
Marsh Posté le 30-08-2002 à 00:59:24
imagine un objet A qui contient une reference vers un objet B
shallow clone : quand A est cloné, la reference vers B reste la meme
deep clone : quand A est cloné, la référence est vers un nouvel objet B (B est cloné également)
Marsh Posté le 30-08-2002 à 01:03:23
Mon problème est le suivant :
Code :
|
Je dispose d'un tableau de Data :
Data[] datas |
Je veux cloner "datas", tout en laissant l'objet task en référence pour tous les clones. Comment j'écris ma méthode clone, alors ?
Marsh Posté le 30-08-2002 à 01:08:46
ben
Code :
|
la tu as cloné un objet Data comme tu le voulais, la référence est intacte ...
je vois pas ou est le soucis
Marsh Posté le 30-08-2002 à 01:09:55
Ben, j'ai jamais cloné, j'ai peur de copier des trucs que je veux pas copier, ou de faire des références où il ne faut pas.
Marsh Posté le 30-08-2002 à 01:11:58
ben c simple
si tu as un attribut qui n'est pas un type de base (objet donc)
si tu veux garder la référence : tu la passes en arguement du constructeur de ton objet ici Date(this.task,this.value)
sinon tu passes un nouvel objet du type voulu : ca donnerait new Date(new Task(aveclesparamsquivontbien),this.value)
Marsh Posté le 30-08-2002 à 01:12:14
Et là, si je tripote value, dans un de mes clones ça va affecter les autres, non ? Quoique non, puisque c'est un type primitif... Heu, en fait j'ai besoin de voir différent cas, pour bien voir la portée de ce mécanisme. Curieusement, j'en avais jamais eu besoin avant.
Marsh Posté le 30-08-2002 à 01:13:27
Cherrytree a écrit a écrit : Et là, si je tripote value, dans un de mes clones ça va affecter les autres, non ? Quoique non, puisque c'est un type primitif... Heu, en fait j'ai besoin de voir différent cas, pour bien voir la portée de ce mécanisme. Curieusement, j'en avais jamais eu besoin avant. |
ben honnetement j'm'en suis jamais trop servi non plus ... mauvais souvenir de TP
ca va rien affecter puisque tu crées a chaque fois une nouvelle instance de Data, et pis c un type de base, donc pas une référence
Marsh Posté le 30-08-2002 à 01:14:45
Et la méthode clone() de Object, elle fait quoi en fait, si je fais un super.clone(), quel va être le résultat ?
Marsh Posté le 30-08-2002 à 01:16:00
Cherrytree a écrit a écrit : Et la méthode clone() de Object, elle fait quoi en fait, si je fais un super.clone(), quel va être le résultat ? |
clonage superficiel
Marsh Posté le 30-08-2002 à 01:18:42
HappyHarry a écrit a écrit : clonage superficiel |
l'équivalent de celle que tu as décrite, dans mon cas, donc.
Marsh Posté le 30-08-2002 à 01:22:59
Cherrytree a écrit a écrit : l'équivalent de celle que tu as décrite, dans mon cas, donc. |
yep, il va conserver la référence a ton objet Task
Marsh Posté le 30-08-2002 à 01:29:03
cette ligne de mon code foire :
Code :
|
Je sentais bien que c'était faux, mais je connais pas la bonne syntaxe, en fait.
Marsh Posté le 30-08-2002 à 01:29:26
ReplyMarsh Posté le 30-08-2002 à 01:41:54
Cherrytree a écrit a écrit : cette ligne de mon code foire :
|
euh ... tu veux pas betement créer un tableau de meme taille et cloner les éléments du tableau ?
Marsh Posté le 30-08-2002 à 01:44:00
Autant pour moi, en fait ça marche, c'était une erreur d'héritage sur le constructeur. Par contre, ça clone que dalle, on dirait. Bon allons y pour le débug.
Marsh Posté le 30-08-2002 à 02:13:41
Bon, le problème est le suivant :
ça marche pour un objet unique, mais dès que je veux cloner un tableau, c'est comme si je passais une référence : la question est donc comment cloner un tableau d'objets.
Marsh Posté le 30-08-2002 à 02:21:48
Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ?
Marsh Posté le 30-08-2002 à 09:05:19
Cherrytree a écrit a écrit : Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ? |
non pas que je sache en tout cas.
Marsh Posté le 30-08-2002 à 09:15:04
Cherrytree a écrit a écrit : Si je fais le clonage élément par élément, là ça marche. y a moyen de faire moins lourd ? |
System.arrayCopy est ton ami !
Marsh Posté le 30-08-2002 à 09:19:44
benou a écrit a écrit : System.arrayCopy est ton ami ! |
j'avais pas vu qu'il parlait d'éléments d'un tableau ... mal réveillé moa
Marsh Posté le 30-08-2002 à 09:20:49
benou a écrit a écrit : System.arrayCopy est ton ami ! |
grilled
Marsh Posté le 30-08-2002 à 09:34:03
il a voulu l'écrire puis il a vu ton post surement ...
Marsh Posté le 30-08-2002 à 09:45:37
DarkLord a écrit a écrit : il a voulu l'écrire puis il a vu ton post surement ... |
ouaip!
trop rapide ce benou !
Marsh Posté le 30-08-2002 à 09:51:59
Bon, ben je vais voir ça. System.arrayCopy fait appel à la méthode clone des éléments du tableaux, je suppose, non ?
Marsh Posté le 30-08-2002 à 10:19:40
Cherrytree a écrit a écrit : Bon, ben je vais voir ça. System.arrayCopy fait appel à la méthode clone des éléments du tableaux, je suppose, non ? |
non, ca copie un tableau de façon binaire (et de façon optimisée).
bref, tu fais ca quoi :
Code :
|
Marsh Posté le 30-08-2002 à 10:34:30
ReplyMarsh Posté le 30-08-2002 à 10:40:59
bin non c'est un clone ... c'est copié quoi
Marsh Posté le 30-08-2002 à 11:21:27
Bin alors comment faire pour obtenir la chose suivante :
Une liste d'objet doit être passée en référence à des Solvers (dont le nombre varie, certains sont détruits, d'autres créés...), sachant qu'à chaque élément de la liste doit correspondre une valeur, propre à chaque Solver.
Je reprends :
Un solver, c'est un tableau, dont chaque élément est constitué d'un Objet appartenant à la liste de départ, et d'un entier, propre à ce Solver.
Marsh Posté le 30-08-2002 à 11:26:51
et ... ?
Marsh Posté le 30-08-2002 à 11:39:02
ReplyMarsh Posté le 30-08-2002 à 11:41:08
DarkLord a écrit a écrit : et ... ? |
Je veux créer des instances de Solver, je veux des clones qui conaissent les éléments de TaskList (la liste de départ) et qui associent via Data un entier, non cloné. Comment feriez vous ?
Marsh Posté le 30-08-2002 à 11:56:09
Dans chaque Solver, il y a autant d'objet Data dans le tableau Data[] que d'objet Task dans TaskList. Le nombre d'objets Solver est indépendant de tout ça, mais il y en aura beaucoup.
Marsh Posté le 30-08-2002 à 12:25:09
je suis désolé je comprends rien.
Marsh Posté le 30-08-2002 à 12:46:10
cherrytree tu me pretes ton penpad stp?
(c bien ça que tu voulais montrer nan? )
( btw)
Marsh Posté le 30-08-2002 à 00:33:29
Heu, je suis pas sur d'avoir compris ce que veulent dire les nuances suivantes :
shallow clone
deep clone
Moi, je veux cloner un objet qui contient une référence à un autre objet. Je veux que tous mes clones aient la même référence sur ce point précis, mais que les autres champs soient des nouvelles instances. Alors comment je la fais ma méthode clone ?
Message édité par Cherrytree le 30-08-2002 à 14:15:59
---------------
Le site de ma maman