En Effective Java, el autor afirma que:¿Qué es esta copia de campo por campo hecha por Object.clone()?
Si una clase implementa Cloneable, método clone de objeto devuelve una copia campo por campo del objeto; de lo contrario arroja CloneNotSupportedException.
Lo que me gustaría saber es a qué se refiere con la copia de campo por campo. ¿Significa que si la clase tiene X bytes en la memoria, simplemente copiará esa pieza de memoria? En caso afirmativo, ¿puedo suponer que todos los tipos de valores de la clase original se copiarán en el nuevo objeto?
class Point implements Cloneable{
private int x;
private int y;
@Override
public Point clone() {
return (Point)super.clone();
}
}
Si lo hace es Object.clone()
un campo por campo copia de la clase Point
, diría que yo no tenga que copiar de manera explícita campos x
y y
, siendo que incluya la palabra clave será más que lo suficiente como para hacer una copia de la clase Point
. Es decir, el siguiente bit de código es redundante:
@Override
public Point clone() {
Point newObj = (Point)super.clone();
newObj.x = this.x; //redundant
newObj.y = this.y; //redundant
}
¿Estoy en lo cierto?
Sé que las referencias del objeto clonado apuntarán automáticamente hacia donde apuntaban las referencias del objeto original, pero no estoy seguro de qué ocurre específicamente con los tipos de valores. Si alguien pudiera decir claramente qué es la especificación del algoritmo Object.clone()
(en un lenguaje fácil) sería genial.
¿Por qué no usarías la clonación de Java y escribirías tu propio método? ¿Alguna razón específica? – zengr
Lee Java efectivo. Hay muchos de ellos. –
http://www.javapractices.com/topic/TopicAction.do?Id=71 –