2011-10-14 4 views
6

J'ai lu le javadoc pour les deux Object et Cloneable et je ne reçois pas quelque chose. Quelqu'un peut-il me s'il vous plaît expliquer les performances et/ou des différences fonctionnelles aux deux exemples suivants:Clonage avec et sans clonage

public class Widget 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

..et:

public class Widget implements Cloneable 
{ 
    @Override 
    public Widget clone() 
    { 
      // ... return a clone of this Widget 
    } 
} 

Depuis Cloneable n'a pas de méthodes qui lui sont liés, et seulement vous donne accès à la méthode clone() protégée de Object, est-il toujours logique de l'implémenter même en premier lieu, vu que vous allez devoir écrire votre propre code (sûr) clone() de toute façon ? Merci d'avance pour toute clarification/contribution.

Répondre

5

C'est un contractual obligation.

Invoquer méthode clone de l'objet sur une instance qui ne met pas en œuvre les résultats d'interface Cloneable à l'exception CloneNotSupportedException étant levée.

Bien qu'il puisse y avoir aucune méthode pour passer outre, vous êtes en train d'appliquer une interface vous faites partie. En faisant cela, vous prenez tout ce qui vient avec son contrat subséquent. Cela vous force à implémenter sciemment la méthode clone() rendant ainsi le comportement explicite.

+0

Très intéressant - merci! – IAmYourFaja

+0

le lien ne fonctionne plus – marcospgp

0

a) Le clonage appelle une manière extralinguistique de construire des objets - sans constructeurs.

b) Le clonage nécessite de traiter d'une manière ou d'une autre avec CloneNotSupportedException - ou de déranger le code client pour le traiter.

c) Les avantages sont faibles - vous n'avez pas besoin d'écrire manuellement un constructeur de copie. Donc, utilisez Judiosly Cloneable. Il ne vous donne pas des avantages suffisants en comparaison avec l'effort que vous devez appliquer pour bien faire.

About Java cloneable