In Scala, führt AnyRef.clone
eine seichte oder tiefe Kopie?Führt Scala AnyRef.clone eine seichte oder tiefe Kopie aus?
Antwort
Kurze Antwort: flach.
Nicht-so-kurze Antwort: Es sei denn, es außer Kraft gesetzt ist, AnyRef.clone() verwendet die Java Object.clone() als ihre Umsetzung.
Javadoc- auf Object.clone():
Die Methode Clone für Klasse Object führt eine spezifische Duplizierung. Erstens, wenn die Klasse dieses Objekts die Schnittstelle Cloneable nicht implementiert, wird eine CloneNotSupportedException ausgelöst. Beachten Sie, dass alle Arrays die Schnittstelle Cloneable implementieren. Andernfalls erzeugt diese Methode eine neue Instanz der Klasse dieses Objektes und initialisiert alle seine Felder mit genau die Inhalte der entsprechenden Felder dieses Objekts, wie durch Zuordnung; Der Inhalt von die Felder sind nicht selbst geklont. So führt diese Methode eine "flache Kopie " dieses Objekts, keine "tiefe Kopie" -Operation.
Bitte beachten Sie:
- AnyRef.clone(), wie sein Pendant in Java, hat eine "geschützte" Zugriffsebene, so dass ihre nicht von überall aufrufbar.
- Sie müssen Cloneable implementieren, damit clone() funktioniert.
Lange Antwort: Lesen Effective Java, 2nd Edition, Punkt 11: Überschreiben von Klon umsichtig
Zusammenfassung: Verwenden Sie es nicht. Es gibt bessere Alternativen.
- 1. Führt Arrays.copyOf eine seichte oder eine tiefe Kopie?
- 2. Führt Enumerable.Repeat() eine tiefe Kopie durch?
- 3. Wird seichte Kopie wirklich benötigt?
- 4. Erstellt Gorutine eine tiefe Kopie oder flache Kopie?
- 5. Tiefe Kopie von 2D-Array in Scala?
- 6. Klon Methode für Array eine tiefe oder eine flache Kopie?
- 7. Frage über seichte Kopie in C++
- 8. Standardvektor C++ - tiefe oder flache Kopie
- 9. tiefe Kopie der Doktrin
- 10. Flache Kopie und tiefe Kopie in C
- 11. Tiefe Kopie eines Drawable
- 12. Gibt listIterator.next() tiefe Kopie oder flache Kopie zurück?
- 13. Gibt mir ein Schneidevorgang eine tiefe oder flache Kopie?
- 14. wie eine tiefe Kopie meiner Liste machen
- 15. Wie man manuell eine tiefe Kopie
- 16. R: tiefe Kopie ein Funktionsargument
- 17. In C# führt Array.ToArray() eine DEEP-Kopie durch?
- 18. Erstellen Sie QImage aus Puffer, keine tiefe Kopie?
- 19. Wie man eine "tiefe" Kopie einer Funktion macht - Javascript
- 20. tiefe Kopie Fehler, wenn benutzerdefiniertes Kopieren Objekt
- 21. Tiefe Kopie von "xml_document" in pugixml "Clone"
- 22. C tiefe Kopie Struktur mit Zeiger
- 23. Gibt LINQ eine tiefe Kopie einer Sammlung zurück?
- 24. Wie man eine tiefe Kopie eines InputStream in Java macht
- 25. Scala-Futures - welcher Thread führt onComplete aus?
- 26. Does Java schafft eine tiefe Kopie des Objekts oder der Link nur auf seine Referenz
- 27. Wie wird der Speicher verwaltet, nachdem eine seichte Kopie erstellt wurde?
- 28. Mein RCP-Client gibt keine tiefe Kopie eines Objekts zurück
- 29. Tiefe Kopie bei der Verwendung von ArrayList in Java
- 30. Kopie elision führt zu unterschiedlichen Ergebnissen
"Es gibt bessere Alternativen." Würde es Ihnen etwas ausmachen, auf einige zu verweisen? –
1. Kopieren Sie Konstruktor, je C++. 2. Fallklasse mit eingebauter "copy" -Methode in Scala 2.8.x. 3. Verwenden Sie unveränderliche Objekte: Sie müssen nicht kopieren, sondern nur teilen. –
Also C++ -ähnliche Kopierkonstruktoren sind eigentlich (irgendwie) in Ordnung in Scala? Ich kam von C++ zu der Sprache und bevor ich meine erste Kopie machte, wollten Konstrukteure sehen, ob mir etwas fehlte. Scheint ... es ist in Ordnung (meine Objekte haben einen veränderlichen Zustand). – akauppi