Java: Justificación de la interfaz cloneable


¿Por qué no se especificó el método .clone() en la interfaz java.lang.Cloneable?

Author: Joachim Sauer, 2009-04-02

5 answers

Básicamente, es una interfaz rota. Ken Arnold y Bill Venners lo discutieron en Java Design Issues.

Arnold:

Si yo fuera Dios en este punto, y muchas personas probablemente se alegran de que no lo sea, yo diría que estoy en desuso Cloneable y tengo un Copyable, porque Cloneable tiene problemas. Además del hecho de que está mal escrito, Cloneable no contiene el método clone. Eso significa que no puede probar si algo es una instancia de Cloneable, enviarla a Cloneable e invocar clone. Usted tengo que usar la reflexión de nuevo, lo cual es horrible. Ese es solo un problema, pero uno que sin duda resolvería.

 36
Author: Bill the Lizard,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-09-14 06:43:50

Vea este error en la base de datos de errores de Java:

Http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=4098033

Esencialmente, este es un defecto de diseño en versiones anteriores de Java que no tienen la intención de corregir en la interfaz Cloneable, ya que hacerlo rompería la compatibilidad con algún código existente.

 10
Author: David M,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-02 11:56:55

En Java, existe este concepto de interfaces de marcadores. La interfaz Cloneable no tiene métodos ni campos y solo sirve para identificar la semántica de ser clonable.

Del sitio web dev-x :

A menudo se encontrará con interfaces en Java que no tienen ningún comportamiento. En otras palabras, son solo definiciones de interfaz vacías. Estos son conocidos como interfaces de marcadores. Algunos ejemplos de interfaces de marcadores en la API de Java incluyen:

 6
Author: Peter Perháč,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-02 09:45:34

En el proyecto en el que trabajo, hemos creado una interfaz llamada PublicCloneable, contiene el método clone y especifica que es público.

Me parece útil: el hecho de que haya un método de clonación, pero no pueda acceder a él no ayuda mucho.

public interface PublicCloneable extends Cloneable {
    public Object clone();
}
 5
Author: Nicolas C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-06 14:09:27

Porque el método clone está implementado en la clase Object debido a su condición "especial": la copia en memoria de objetos de cualquier tipo.

 1
Author: fbinder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-04-02 11:57:11