Cómo utilizar el método clone para crear una copia superficial en java
los clon método en Java crea manualmente una copia del objeto original y lo devuelve. En muchos casos, esta es la manera más fácil de crear un clon. Pero lo que si su clase tiene cien o más campos que deben ser duplicados?
La posibilidad de olvidarse de copiar uno de los campos es alto, y si se agrega un campo a la clase más adelante, es posible que se olvide de modificar el clon método para incluir el nuevo campo. Afortunadamente, puede resolver este problema mediante el uso de la clon método de la Objeto clase directamente en su propia clon método.
los clon método de la Objeto clase puede crear automáticamente una copia de su objeto que contiene duplicados de todos los campos que son tipos primitivos (como int y doble), Así como copias de los tipos de referencia inmutables - más notablemente, cuerdas. Así que si todos los campos de la clase o son primitivas o cadenas, puede utilizar la clon método proporcionado por la Objeto clase para clonar tu clase.
Este tipo de clon se conoce como una copia superficial.
Para llamar al clon método de su propia clon método, basta con especificar super.clone (). Antes de que pueda hacer eso, sin embargo, debe hacer dos cosas:
Declarar que la clase apoya la Cloneable interfaz. los Cloneable interfaz es una interfaz de marcado que no proporciona ningún método. Simplemente marca una clase de ser apropiado para la clonación.
Incluya la llamada a super.clone () en un try / catch declaración que detecta la excepción CloneNotSupportedException. Esta excepción se produce si intenta llamar clon en una clase que no implementa la Cloneable interfaz. Siempre que implemente Cloneable, esta excepción no será jamás sucederá, sino porque CloneNotSupportedException es una excepción comprobada, debe cogerlo.
He aquí un ejemplo de un Empleado clase con un método clone que utiliza super.clone () para clonar en sí:
clase Employee implementa Cloneable {// Campos y métodos omitidas ... clon public Object () {Employee emp-try {emp = (Employee) super.clone () -} catch (CloneNotSupportedException e) {return null- // nunca lo hará sucederá} return EMP}}
Tenga en cuenta que este método no tiene que ser consciente de cualquiera de los campos declarados en la Empleado clase. Esta clon método, sin embargo, sólo funciona para las clases cuyos campos son todos cualquiera de los tipos primitivos u objetos inmutables como las cuerdas.