Me pregunto si hay una forma recomendada de hacer clones / copias profundas de instancias en Java.
Tengo 3 soluciones en mente, pero me puedo perder algunas, y me gustaría tener tu opinión
editar: incluya la propuesta de Bohzo y refine la pregunta: se trata más de la clonación profunda que de la clonación superficial.
Hazlo tu mismo:
codifique las propiedades del clon a mano después de las propiedades y compruebe que las instancias mutables también se clonen.
pro:
- control de lo que se realizará
-
contras de ejecución rápida :
- tedioso de escribir y mantener
- propenso a errores (falla de copiar / pegar, propiedad faltante, propiedad mutable reasignada)
Usar reflexión:
Con sus propias herramientas de reflexión o con un ayudante externo (como jakarta common-beans), es fácil escribir un método de copia genérico que haga el trabajo en una línea.
pro:
- fácil de escribir
- sin
contras de mantenimiento :
- menos control de lo que sucede
- propenso a errores con objeto mutable si la herramienta de reflexión tampoco clona subobjetos
- ejecución más lenta
Use el marco de clonación:
Use un marco que lo haga por usted, como:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- igual que la reflexión
- más control sobre lo que se clonará exactamente.
contras:
- cada instancia mutable está completamente clonada, incluso al final de la jerarquía
- podría ser muy lenta de ejecutar
Utilice la instrumentación de bytecode para escribir clon en tiempo de ejecución
Se puede usar javassit , BCEL o cglib para generar un clonador dedicado tan rápido como escribir con una mano. ¿Alguien conoce una biblioteca que usa una de estas herramientas para este propósito?
¿Qué me he perdido aquí?
Cuál recomendarías ?
Gracias.