> ...mais il 
> n'existe pas de façon générique de cloner un objet. C'est une limitation 
> volontaire. Tu peux trouver des workeround partiels, mais rien de
générique. 
> Tu DOIS partir d'une classe que tu as toi même défini et écrit, classe qui

> concrétise Cloneable et qui rend publique la méthode clone...

Je suis à 100% d'accord avec toi. Le clonage est toujours problématique et
demande pas mal de réflexion avant de l'écrire.

Par contre, Dominique a raison sur un point.
Si tu as un tableau de clonable, alors tu peux vouloir dire :

Le clone d'un tableau de clonable est le tableau des clones.
En le lisant doucement on comprend, si, si :-)

Or, savoir qu'un objet est clonable (java.lang.Cloneable) ne rend pas pour
autant sa méthode accessible (java.lang.Object # protected Object clone()
throws CloneNotSupportedException), ce qui est bien dommage.
Il aurait suffit de définir
public Object clone() throws CloneNotSupportedException
dans l'interface clonable pour que ça marche et que l'on puisse écrire :

public Cloneable[] cloneTableau(Cloneable[]     tableau) {

Cloneable[]     tableauClone    = new Cloneable[tableau.length];
for(int i=0; i<tableau.length; i++) {
        tableauClone[i] = tableau[i].clone();
}
return tableauClone;
}

--------------------------------------------------------------------
Erik Mazoyer, Chef de projet
HyperOffice
6, rue Jacques Daguerre - 92565 Rueil-Malmaison Cedex
Tél. 01 41 96 96 76
Fax 01 41 96 96 77
Mél  [EMAIL PROTECTED] 
 

-----Message d'origine-----
De : Herve AGNOUX [mailto:[EMAIL PROTECTED]]
Envoyé : mardi 3 décembre 2002 15:05
À : [EMAIL PROTECTED]
Objet : Re: Re: Re: Duplication d'un Objet


Le Mardi 3 Décembre 2002 13:33, Dominique Gallot a écrit :

>
> Clonable[] obj;
> Clonable[] newObject;
>
> Comment de facon generique copier le tableau ? Le seul moyen est d'appeler
> via l'introspection, la methode Clone() ( qui existe et en
> plus qui fonctionnera via que l'object implemente Clonable ) pour cloner
> l'object !
>

Je ne sais pas si j'ai été assez clair là dessus dans mon message, mais il 
n'existe pas de façon générique de cloner un objet. C'est une limitation 
volontaire. Tu peux trouver des workeround partiels, mais rien de générique.

Tu DOIS partir d'une classe que tu as toi même défini et écrit, classe qui 
concrétise Cloneable et qui rend publique la méthode clone, ou te
débrouiller 
avec des astuces de serialization, elles mêmes non génériques, c'est comme 
ça, un point, c'est tout. Affiche le en GROS dans ton bureau !

Pour les tableaux, la méthode simple, qui ne fait qu'un clone partiel, est 
java.lang.System.arraycopy(...). Tu peux aussi t'amuser à partir de 
java.util.Arrays.asList(...) (mais là aussi, clone partiel uniquement).

A+.



-- 
SARL diaam informatique - 04 50 77 12 60
Ingenierie, développements de systèmes d'information
http://www.diaam-informatique.com


-- 
SARL diaam informatique - 04 50 77 12 60
Ingenierie, développements de systèmes d'information
http://www.diaam-informatique.com

Répondre à