Eu estou querendo saber se existe uma maneira recomendada de fazer clone / cópia profunda da instância em java.
Tenho 3 soluções em mente, mas posso sentir falta de algumas e gostaria de ter sua opinião
editar: inclua a proposta de Bohzo e refine a pergunta: trata-se mais de clonagem profunda do que de clonagem superficial.
Faça Você Mesmo:
codifique o clone manualmente, após as propriedades, e verifique se as instâncias mutáveis também são clonadas.
pro:
- controle do que será executado
-
contras de execução rápida :
- tedioso para escrever e manter
- propenso a erros (falha de copiar / colar, falta de propriedade, propriedade mutável reatribuída)
Use reflexão:
Com suas próprias ferramentas de reflexão ou com um auxiliar externo (como jakarta common-beans), é fácil escrever um método genérico de cópia que fará o trabalho em uma linha.
pro:
- fácil de escrever
- sem
contras de manutenção :
- menos controle do que acontece
- propenso a erros com objetos mutáveis se a ferramenta de reflexão também não clonar sub-objetos
- execução mais lenta
Use a estrutura do clone:
Use uma estrutura que faça isso por você, como:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- o mesmo que reflexão
- mais controle sobre o que será exatamente clonado.
contras:
- toda instância mutável é totalmente clonada, mesmo no final da hierarquia
- pode ser muito lenta para executar
Use a instrumentação bytecode para gravar clone em tempo de execução
javassit , BCEL ou cglib podem ser usados para gerar um clonador dedicado tão rápido quanto uma mão escreveu. Alguém conhece uma biblioteca usando uma dessas ferramentas para esse fim?
O que eu perdi aqui?
Qual desses você recomendaria ?
Obrigado.