7 votes

Comment puis-je copier en profondeur un objet arbitraire dans GWT ?

J'ai un objet arbitraire étiqueté comme Serializable. Il possède divers objets enfants mutables représentant des montants monétaires, des collections, etc. Je veux pouvoir cloner cet objet de sorte que si l'utilisateur le modifie et revient ensuite sur sa décision, je peux simplement remplacer le clone par un nouveau clone.

Cela implique que j'ai besoin d'une copie profonde car je ne veux pas que les modifications apportées par les utilisateurs aux objets enfants (par exemple, l'ajout ou l'insertion d'éléments de la collection) apparaissent sur l'original.

Les objets n'implémentent pas Cloneable et comme ils sont autogénérés, je ne peux pas non plus ajouter une telle méthode.

Sans écrire péniblement à la main un clone profond, y a-t-il un moyen d'accomplir la même chose dans GWT ? Si c'était Java, je pourrais envisager de sérialiser l'objet dans un flux de tableau d'octets et de désérialiser une nouvelle copie.

Je ne peux pas faire cela dans GWT. Potentiellement, je pourrais exploiter le RPC parce que l'objet est envoyé à une servlet plus tard. Je ne sais pas si c'est facile à faire.

Quelqu'un connaît-il un moyen simple de faire une copie profonde ?

1voto

Gursel Koca Points 8541

Si vous avez la possibilité d'ajouter une interface ou une annotation à vos classes de domaine, vous pouvez utiliser gwt-ent pour la réflexion, et vous pouvez facilement écrire votre propre sémantique de copie profonde au moyen de la réflexion. J'ai utilisé cette technique pour améliorer les performances de sérialisation de gwt en mode dev.

Comme autre solution, vous pouvez utiliser le mécanisme de sérialisation par défaut de gwt pour la copie profonde, mais malheureusement je n'ai aucune idée de la façon dont vous pourriez accomplir ce but .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X