2012-07-14 17 views

Respuesta

4

Eso es porque el método clone() arroja CloneNotSupportedException si su objeto no es Cloneable.

Debería echarle un vistazo al método documentation for clone().

A continuación se presenta cómo se declara clone() método en la clase Object:

protected Object clone() throws CloneNotSupportedException 

Nota:

Además, se ha dio cuenta de que Clone se rompe. This answer aquí en SO explica por qué y cómo puede evitar usarlo.

1

Haciendo Cloneable una interfaz de marcador fue un error.

Dicho eso, lo único que hace es "habilitar" la implementación predeterminada de clone() en Object. Si no lo hace implement Cloneable, invocando super.clone() lanzará un CloneNotSupportedException.

+0

¿Podría explicar por qué fue un error? –

+2

@MarkRotteveel La interfaz clonable debe tener un método de clonación, y el método de clonación protegida en Object no debería requerir "activación". La interfaz, tal como está, no tiene un propósito útil real, mientras que usa un buen nombre y causa confusión. –

1

Algunas personas dicen que es un intento de imitar constructor de copia de C++, pero aquí está la anterior pregunta similar en StackOverflow al respecto: About Java cloneable

1

El propósito se especifica en el javadoc. Es especificar que la clonación de un objeto de este tipo está permitida.

Si su clase se basa en la aplicación integrada de clone() (proporcionada por el método Object.clone()), a continuación, esta interfaz permite marcador clonación campo por campo. (Si se llama a la incorporada en el método clone en un objeto que no implementa Cloneable, se obtiene una CloneNotSupportedException.)

1

Propósito de clone() método es crear una nueva instancia (copia) del objeto sobre el que se llamado. Como puede ver en las respuestas para el método de clonación de uso, su clase debería implementar la interfaz Cloneable. Puede elegir cómo implementar clon, puede hacer una copia superficial o profunda para su clase. Puede ver los ejemplos http://javapapers.com/core-java/java-clone-shallow-copy-and-deep-copy/.

Cuestiones relacionadas