En Scala, ¿realiza AnyRef.clone
una copia superficial o profunda?¿Scala AnyRef.clone realiza una copia superficial o profunda?
Respuesta
Respuesta corta: poco profunda.
respuesta no tan corta: A menos que sea anulado, AnyRef.clone() utiliza Object.clone de Java() como su aplicación.
Javadoc en Object.clone():
El clon método para la clase Object realiza una operación de clonación específica. En primer lugar, si la clase de este objeto no implementa la interfaz Cloneable, a continuación, un CloneNotSupportedException es lanzada. Tenga en cuenta que todas las matrices se consideran implementan la interfaz Clonable. De lo contrario, este método crea un nuevo instancia de la clase de este objeto e inicializa todos sus campos con exactamente los contenidos de los correspondientes campos de este objeto, como por asignación; los contenidos de los campos no son clonados. Por lo tanto, este método realiza una "copia superficial" de este objeto, no una operación "copia profunda ".
Tenga en cuenta:
- AnyRef.clone(), al igual que su contraparte en Java, tiene un nivel de acceso "protegido", por lo que su no puede llamar desde todas partes.
- Deberá implementar Cloneable para que clone() funcione.
Respuesta larga: Leer Effective Java, 2ª edición, artículo 11: clon de anulación juiciosamente
Resumen: No lo utilice. Hay mejores alternativas.
- 1. copia profunda vs copia superficial
- 2. ¿SqlCommand.Clone() crea una copia profunda o una copia superficial?
- 3. std vector C++ - copia profunda o superficial
- 4. C: Haciendo una copia profunda de una estructura ... haciendo una copia superficial de una estructura
- 5. copia profunda en C#
- 6. ¿El método de clonación en la matriz es una copia profunda o poco profunda?
- 7. ArrayList copia superficial iterar o clonar()
- 8. Comprender dict.copy() - superficial o profundo?
- 9. ¿Hace Enumerable.Repeat() una copia profunda?
- 10. copia superficial de un hashset
- 11. clone(): ArrayList.clone() pensé hace una copia superficial
- 12. Copia de estructura profunda
- 13. Copia profunda en JPA
- 14. BeanUtils.cloneBean() copia profunda
- 15. argumentos de multiprocesamiento de python: ¿copia profunda?
- 16. Crear una copia profunda en C#
- 17. ¿Los objetos se insertan en una matriz en javascript profunda o superficial?
- 18. Pregunta sobre copia superficial en C++
- 19. copia superficial de un mapa en Java
- 20. Enhebrado trenzado cómo evitar la copia profunda
- 21. ¿Cómo mejorarías esta clase de copia superficial?
- 22. ¿Cómo hago una copia superficial de una referencia de hash Perl?
- 23. qué es una copia superficial de la matriz
- 24. ¿Cómo hacer una copia profunda de una matriz?
- 25. Ayuda con copia y copia profunda en Python
- 26. Copia profunda de matrices en Ruby
- 27. Copia profunda de un objeto C#
- 28. Copia profunda duplicada() de ByteBuffer de Java
- 29. Copia profunda de una instancia de clase .NET sin serialización
- 30. Escribir una copia profunda - copiando el valor del puntero
"Hay mejores alternativas". ¿Te importaría hacer referencia a algunos? –
1. Copiar constructor, por C++. 2. Clase de caso con método de "copia" incorporado en Scala 2.8.x. 3. Utilice objetos inmutables: no necesita copiar, solo compartir. –
¿Así que los constructores de copia tipo C++ son realmente (tipo de) bien en Scala? Llegué al lenguaje de C++ y antes de hacer mi primera copia, los constructores querían ver si me faltaba algún punto. Parece ... está bien (mis objetos tienen estado mutable). – akauppi