clone () vs copie constructeur vs méthode d'usine?

j'ai fait un rapide google sur l'implémentation de clone () en Java et j'ai trouvé: http://www.javapractices.com/topic/TopicAction.do?Id=71

il a le commentaire suivant:

Les constructeurs de copies

et les méthodes statiques d'usine offrent une alternative au clone, et sont beaucoup plus faciles à mettre en œuvre.

Tout ce que je veux c'est faire une copie profonde. Implémenter clone() semble faire beaucoup de bon sens, mais cet article de haut niveau de google me fait un peu peur.

Voici les problèmes que j'ai remarqués:

Copier les constructeurs ne fonctionnent pas avec les médicaments Génériques.

voici un pseudo-code qui ne sera pas compilé.

public class MyClass<T>{
   ..
   public void copyData(T data){
       T copy=new T(data);//This isn't going to work.    
   }
   ..
}

Exemple 1: Utilisation d'un constructeur de copie dans une classe générique.

les méthodes D'usine n'ont pas de nom standard.

c'est assez agréable d'avoir une interface pour le code réutilisable.

public class MyClass<T>{
    ..
    public void copyData(T data){
        T copy=data.clone();//Throws an exception if the input was not cloneable
    }
    ..
}

exemple 2: Utilisation de clone () dans une classe générique.

j'ai remarqué que le clone n'est pas une méthode statique, mais ne serait-il pas encore nécessaire de faire des copies profondes de tous les champs protégés? Lors de la mise en œuvre de clone(), l'effort supplémentaire pour jeter les exceptions dans les sous-classes non clonables me semble anodin.

est-ce que je manque quelque chose? Toutes les suggestions seraient appréciées.

73
demandé sur akarnokd 0000-00-00 00:00:00