7
votes

Quel est le besoin de cloner un objet en Java

Je lisais sur le clonage en Java, comment faire des copies superficielles / profondes de l'objet, etc.

Je me demandais pourquoi dois-je créer des clones d'objet en Java? Tous les exemples de temps réel pourraient être utiles dans la compréhension.


2 commentaires

Dupliqué possible de méthode clone () en Java ... ou Stackoverflow.com/questions/6182565/... ou Stackoverflow.com/questions/5279256/... ou ... des dizaines d'autres. Veuillez utiliser la recherche avant de poser de nouvelles questions; Beaucoup ont été posées et ont répondu.


Bonjour Brian..Je l'a effectué, mais dans la plupart des messages, seule la mise en œuvre ou la différence entre des copies peu profondes et profondes a été donnée. Je sais sur le clonage superficiel / profond. Je voulais juste connaître la raison pour cloner un objet en Java?


6 Réponses :


8
votes

Avoir une copie clonée de quelque chose signifie que vous pouvez avoir "avant" et "après" versions. Vous pouvez laisser l'original seul pendant que vous testez quelque chose avec une copie. Vous pouvez fournir un annulation en revenant simplement à la version originale.


4 commentaires

Je comprends bien. Mais si vous pouvez me faire savoir des instances de vie réelles où je dois laisser l'objet original seul et tester avec la copie de l'objet, cela vous fera préciser les choses.


Je pense que @Biziclop a suggéré un scénario où vous souhaitez tester la copie. C'est-à-dire que vous voulez tester que la copie réussit peut-être dans une transaction. Si la copie ne réussit pas à réussir en raison de problèmes de validation ou de panne de transaction de base de données, vous pouvez simplement le jeter et revenir à l'original sans avoir à le recréer.


Oui je l'ai eu. Une chose de plus, j'ai lu que nous clonerons un objet lors de l'initialisation d'un objet trop cher, au lieu de créer un nouvel objet, nous pouvons cloner un objet existant et ne modifier que les propriétés qui comptent à notre nouvelle instance.Coulez-vous à lancer quelques-unes lumière dessus?


@Anand, avez-vous eu votre réponse, l'initialisation et l'objet d'objet plus coûteux se comparent à cloner?



0
votes

Vous pouvez utiliser une copie clonée profonde de votre objet car vous pourriez avoir besoin d'un résultat partiel dans une méthode que vous souhaitez utiliser ultérieurement.


0 commentaires

4
votes

Très souvent, vous souhaitez utiliser des objets immuables, auquel cas le clonage est une partie essentielle de votre code. Si, par exemple, vous avez un objet immuable disposant d'un champ de type de liste ou de tableau, votre getter doit toujours renvoyer un clone de la liste ou de la matrice pour préserver l'immuabilité.

L'autre cas d'utilisation typique est lorsque vous voulez des modifications "transactionnelles", lorsque vous appelez plusieurs méthodes de changement d'état, mais que vous voulez seulement que le résultat soit visible si tous ont réussi.


2 commentaires

Comme vous l'avez dit, après avoir une liste de champ d'objet immuable, je dois retourner un clone de cette liste dans Getter, mais je peux créer une nouvelle liste à l'aide de «Nouveau» puis de le renvoyer. L'interface de liste n'a également pas de méthode clone, seules les classes de mise en œuvre ont une méthode clone.Lorsque dois-je utiliser Clone?


@anand je voulais cloner comme une opération en général. Une voie de clonage est en effet d'utiliser des constructeurs de copies. Un autre consiste à mettre en œuvre une méthode clone () . Peu importe la façon dont vous avez atteint le clonage, une manière est aussi bonne que l'autre.



0
votes

comme moyen d'aider à préserver l'encasulation (et donc à vous rendre plus robuste), vous pouvez cloner des objets avant de les renvoyer d'un getter. Par exemple, une méthode getDate pourrait cloner un champ de date avant de retourner à l'appelant.


1 commentaires

Comme vous l'avez dit, je peux cloner un champ de date avant de retourner mais je peux également créer un nouvel objet de date, pourquoi devrais-je utiliser Clone ici?



2
votes

Un exemple concret de clonage est le: modèle de conception prototype


0 commentaires

1
votes

Comme le clonage lui-même dit une copie en double de quelque chose, donc en Java lorsque nous disons clonage de l'objet, cela signifie créer ou avoir un autre objet de la même manière existante.

Quand nous clonage? Lorsque nous avons vu que la création d'un nouvel objet à chaque fois fait du temps prend du temps ou que nous avons besoin d'un nouvel objet ayant la même différence de bit W.R.T tous les objets créés prêts, puis nous utilisons le clonage.

Clonage est de 3 types en Java

  • Copie peu profonde
  • Copie profonde
  • Clonage

    Copie peu profonde

    Copie peu profonde est le processus dans lequel l'état de l'objet est copié à un autre objet, mais les objets pointent sur la même référence dans la zone de tas.

    copie profonde

    en copie profonde, deux objets distincts sont créés et en copie profonde. Dans ce domaine d'un objet est copié à un autre objet.

    Désormais troisième catégorie pour surmonter cette difficulté à Java est le concept de clonage.

    Clonage en Java est fait en implémentant une interface claquant. Clonable est une interface marqueur.

    Pour des connaissances plus profondes sur le clonage, reportez: Clonage en Java


0 commentaires