Herve AGNOUX
Tue, 03 Dec 2002 09:09:54 -0800
Le Mardi 3 Décembre 2002 16:07, Dominique Gallot a écrit :
>
> 1- Calme, c'est pas moi qui ai posé la question en premier !
>
Excuses-moi je ne me suis absolument pas aperçu que ma réponse pouvait être
interprétée dans un sens négatif. Ce n'était absolument pas mon intention. Je
voulais juste te répondre normalement.
> 2-Il est vraiment absurde de dire, de Clonable
>
> * A class implements the <code>Cloneable</code> interface to
> * indicate to the {@link java.lang.Object#clone()} method that it
> * is legal for that method to make a
> * field-for-field copy of instances of that class.
>
> Et puis d'avoir un tableau d'objects qui indique qu'il est permit de
> cloner l'oject et de ne pas pouvoir le faire !
>
Effectivement.
> 3- Ce n'est tout a fait vrai.
>
> 1-Il est possible d'utilise le meme mechanisme que la serialisation pour
> cloner des objects, "c'est la reflexion/introspection", meme si
> elle n'implemente pas Serializable
> regarge java.lang.AccessibleObject.setAccessible()
> ET en implementant un security manager different de celui
> par default, qui pour info, ne permet ce call, que si il vient des core
> package.
Je connaissais pas ce AccessibleObject, j'irai voir.
> 2- Idem pour clone, on peut meme via des packages de manipulation de
> bytecode ( tt-byte) , implementer l'interface Clonable
> et puis via ce meme package marquer la methode clone comme public, ou
> encore, utilise le java.lang.AccessibleObject.setAccessible() sur
> l'object Method. Mais la cela deviens vraiment bcp pour par faire
> grand chose, quoi que, lorsque l'on sait comment les proxy sont fait,
> cela le devient moins ( java.lan.reflect.Proxy et la helper class
> sun.misc.ProxyGenerator, tt-byte n'a rien inventer ).
>
C'est vrai que l'on peut aller manipuler le bytecode. Pour les proxy, je vois
moins bien le rapport. Les proxy fonctionnent avec des interfaces, il me
semble ? Comment fais-tu ensuite ?
> Je pointais simplement le probleme que Clonable, pour moi, devrait
> - avoir la methode Clone()
Cela aurait peut être été plus habile, mais il restait à concrétiser cette
méthode quelque part. Sun a choisi de la concrétiser directement dans Object,
sous une forme protected, ce n'est pas génial, mais ce n'est pas mauvais non
plus.
> Maintenant je sais que Sun l'a fait afin que du code externe ne puisse pas
> cloner des objects inconnu. Ce qui finalement ne sert a rien, car
> si le descendant possede une method public clone, l'introspection permet
> facilement de passe outre !
>
Si le descendant possede une méthode public clone, c'est que le concepteur de
la classe a pensé bon de rendre cette méthode publique. Donc, c'est bon.
> Donc J'ecrit EN GROS sur mon bureau, que impossible n'est pas java ! ( mais
> gros comment ? )
>
Encore une fois, excuses moi pour cette reflexion trop vite écrite.
--
SARL diaam informatique - 04 50 77 12 60
Ingenierie, développements de systèmes d'information
http://www.diaam-informatique.com