Java: Fundamentos de la interfaz Cloneable
-
22-08-2019 - |
Pregunta
¿Por qué no el método .clone()
especifica en la interfaz java.lang.Cloneable
?
Solución
Básicamente, es una interfaz roto. Ken Arnold y Bill Venners discuten en Java Temas de Diseño .
Arnold:
Si tuviera que ser Dios en este punto, y muchas personas son probablemente bueno que no estoy, yo diría
Cloneable
Desaprobar y tienen unCopyable
, porqueCloneable
tiene problemas. Además del hecho de que está mal escrito,Cloneable
no contiene el métodoclone
. Esto significa que no puede probar si algo es una instancia deCloneable
, echarlo aCloneable
, e invocarclone
. Usted tiene que utilizar la reflexión de nuevo, que es horrible. Esto es sólo un problema, pero una duda me resuelvo.
Otros consejos
Vea este error en la base de datos errores de Java:
http://bugs.sun.com/bugdatabase/view_bug.do? bug_id = 4098033
En esencia, se trata de un defecto de diseño en versiones anteriores de Java que no tienen la intención de fijar en la interfaz Cloneable como hacerlo sería romper la compatibilidad con algo de código existente.
En Java, no es este concepto de interfaces de marcador. La interfaz Cloneable
no tiene métodos o campos y sirve sólo para identificar la semántica de ser cloneable.
dev-x página web:
A menudo se llega a través de interfaces en Java que no tienen ningún comportamiento. En otras palabras, no son más que las definiciones de interfaz vacías. Estos son conocidos como interfaces de marcadores. Algunos ejemplos de interfaces de marcadores en la API de Java incluyen:
En el proyecto de trabajo en, hemos creado una interfaz llamada PublicCloneable, que contiene el método clone y especifica que es público.
Me parece una útil: el hecho de que hay un método clone, pero no se puede acceder a él no ayuda mucho
.public interface PublicCloneable extends Cloneable {
public Object clone();
}
Debido a que el método clone se implementa en la clase de objetos debido a su condición de "especial":. La copia de la memoria de objetos de cualquier clase