2011-03-01 12 views
7

Tengo un objeto arbitrario etiquetado como Serializable. Tiene varios objetos secundarios mutables que representan montos monetarios, colecciones, etc. Quiero poder clonar este objeto, de modo que si el usuario lo modifica y luego revierte su acción, puedo simplemente reemplazar el clon con un clon nuevo.¿Cómo puedo copiar profundamente un objeto arbitrario en GWT?

Eso implica que necesito una copia profunda porque no quiero que los usuarios cambien a los objetos secundarios (por ejemplo, agregar/insertar elementos de la colección) que aparecen en el original.

Los objetos no implementan Cloneable y, como están autogenerados, tampoco puedo agregar dicho método.

¿Falta poco de escribir a mano una copia profunda para lograr lo mismo en GWT? Si esto fuera Java, podría considerar serializar el objeto a una secuencia de matriz de bytes y deserializar una copia nueva.

No puedo hacer eso en GWT. Potencialmente podría aprovechar RPC porque el objeto se envía a un servlet más tarde. Simplemente no sé si eso es fácil de hacer.

¿Alguien sabe de manera simple que puedo hacer una copia profunda?

+0

Lo que genera los tipos que desea desea clonar? –

+0

Un lenguaje específico de dominio. No es algo que pueda cambiarse fácilmente y, aunque no fuera posible, no me gustan los más de 500 objetos que genera, todos con un exceso de GWT para manejar la copia profunda. Por el momento he codificado a mano la copia profunda donde la necesito, pero incluso esa instancia ocupa unas 100 líneas de código. – locka

Respuesta

1

Si tiene la oportunidad de agregar una interfaz o anotación a las clases de su dominio, puede usar gwt-ent para la reflexión, y puede escribir fácilmente su propia semántica de copia profunda mediante la reflexión. He utilizado esta técnica para mejorar el rendimiento de serialización de gwt en el modo dev.

Como otra solución, puede utilizar GWT mecanismo de serialización por defecto de copia profunda, pero unfotunately no tengo ninguna idea de cómo se podría lograr este objetivo ..

+1

Parece un proyecto interesante, pero no creo poder usarlo para esto. Al final, escribí a mano el código de Deepcopy, aunque odiaba hacerlo. – locka

+0

Así no lo resolví (simplemente escribí el código al final), pero vale la pena saber el enlace. – locka

+0

@locka alguna actualización sobre algo que está disponible en este momento? Estoy pensando que tendré que hacer algo como esto. – nikhil

Cuestiones relacionadas