Je me demande s'il existe une méthode recommandée pour effectuer un clonage / copie en profondeur d'une instance en java.
J'ai 3 solutions en tête, mais j'en ai raté quelques-unes, et j'aimerais avoir votre avis
modifier: inclure la proposition de Bohzo et affiner la question: il s'agit plus de clonage profond que de clonage superficiel.
Fais le toi-même:
coder le clone à la main les propriétés après les propriétés et vérifier que les instances mutables sont également clonées.
pro:
- contrôle de ce qui sera effectué
- exécution rapide
contre:
- fastidieux à écrire et à maintenir
- sujet aux bogues (échec copier / coller, propriété manquante, propriété mutable réaffectée)
Utilisez la réflexion:
Avec vos propres outils de réflexion ou avec un assistant externe (comme jakarta common-beans), il est facile d'écrire une méthode de copie générique qui fera le travail en une seule ligne.
pro:
- facile à écrire
- pas de maintenance
contre:
- moins de contrôle sur ce qui se passe
- sujet aux bugs avec objet mutable si l'outil de réflexion ne clone pas trop les sous-objets
- exécution plus lente
Utilisez le cadre de clonage:
Utilisez un framework qui le fait pour vous, comme:
commons-lang SerializationUtils
Java Deep Cloning Library
Dozer
Kryo
pro:
- identique à la réflexion
- plus de contrôle sur ce qui sera exactement cloné.
inconvénients:
- chaque instance mutable est entièrement clonée, même à la fin de la hiérarchie
- peut être très lente à exécuter
Utiliser l'instrumentation bytecode pour écrire un clone au moment de l'exécution
javassit , BCEL ou cglib peuvent être utilisés pour générer un cloneur dédié aussi vite qu'une écriture manuelle. Quelqu'un connaît une bibliothèque utilisant l'un de ces outils à cette fin?
Qu'est-ce que j'ai manqué ici?
Lequel recommanderiez-vous?
Merci.