Ich habe bei der Implementierung von clone () in Java schnell googelt und festgestellt: http://www.javapractices.com/topic/TopicAction.do?Id=71
Es hat den folgenden Kommentar:
Kopierkonstruktoren und statische Factory-Methoden bieten eine Alternative zum Klonen und sind viel einfacher zu implementieren.
Ich möchte nur eine tiefe Kopie erstellen. Die Implementierung von clone () scheint sehr sinnvoll zu sein, aber dieser Artikel mit hohem Google-Rang macht mir ein bisschen Angst.
Hier sind die Probleme, die mir aufgefallen sind:
Kopierkonstruktoren funktionieren nicht mit Generics.
Hier ist ein Pseudocode, der nicht kompiliert werden kann.
public class MyClass<T>{
..
public void copyData(T data){
T copy=new T(data);//This isn't going to work.
}
..
}
Beispiel 1: Verwenden eines Kopierkonstruktors in einer generischen Klasse.
Factory-Methoden haben keine Standardnamen.
Es ist sehr schön, eine Schnittstelle für wiederverwendbaren Code zu haben.
public class MyClass<T>{
..
public void copyData(T data){
T copy=data.clone();//Throws an exception if the input was not cloneable
}
..
}
Beispiel 2: Verwenden von clone () in einer generischen Klasse.
Ich habe festgestellt, dass das Klonen keine statische Methode ist, aber wäre es nicht immer noch notwendig, tiefe Kopien aller geschützten Felder zu erstellen? Bei der Implementierung von clone () erscheint mir der zusätzliche Aufwand, Ausnahmen in nicht klonbaren Unterklassen auszulösen, trivial.
Vermisse ich etwas Alle Einblicke wäre dankbar.