Clon de objeto Java ()

El método clone () de Java Object crea una copia superficial del objeto.

Aquí, la copia superficial significa que crea un nuevo objeto y copia todos los campos y métodos asociados con el objeto.

La sintaxis del clone()método es:

 object.clone()

Parámetros de clone ()

El clone()método no toma ningún parámetro.

clone () Valores devueltos

  • devuelve la copia del objeto
  • lanza CloneNotSupportedExceptionsi la clase del objeto no implementa la Cloneableinterfaz

Nota : la Objectclase no se implementa Cloneable. Por tanto, no podemos llamar al clone()método para el objeto de la Objectclase.

Ejemplo 1: clon de Java ()

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 ) catch (Exception e) ( System.out.println(e); ) ) )

En el ejemplo anterior, hemos creado una clase llamada Main. La clase incluye dos campos nombre y versión. Aquí, hemos inicializado los campos de la clase usando el objeto obj1 de la clase.

Note la línea,

 Main obj2 = (Main)obj1.clone();

Aquí, hemos utilizado el clone()método para crear una copia de obj1. El valor devuelto por clone()se asigna al objeto obj2. Dado que el valor de retorno de clone()is Objecttype, lo hemos utilizado (Main)para convertirlo en Main type.

Ahora se puede acceder al nombre de los campos y la versión usando el objeto obj2. Sin embargo, si cambiamos el valor de los campos usando obj2, el valor asociado con obj1 no cambiará.

Ejemplo 2: cambio de valor usando un objeto clonado

 class Main implements Cloneable ( // declare variables String name; int version; public static void main(String() args) ( // create an object of Main class Main obj1 = new Main(); // initialize name and version using obj1 obj1.name = "Java"; obj1.version = 14; // print variable System.out.println(obj1.name); // Java System.out.println(obj1.version); // 14 try ( // create a clone of obj1 Main obj2 = (Main)obj1.clone(); // print the variables using obj2 System.out.println(obj2.name); // Java System.out.println(obj2.version); // 14 // changing value of name // using obj2 obj2.name = "Python"; System.out.println(obj2.name); // Python // check if value associated // with obj1 is changed System.out.println(obj1.name); // Java ) catch (Exception e) ( System.out.println(e); ) ) )

Note la línea,

 obj2.name = "Python";

Aquí, hemos cambiado el valor de la variable usando obj2. Ahora, cuando imprimimos el nombre de la variable tanto para obj1 como para obj2, podemos ver que el valor de obj1 no ha cambiado. Es porque el clone()método hace una copia superficial de los objetos.

Para obtener más información sobre la copia superficial, visite ¿Qué es la copia superficial en Java?

Hemos incluido el clone()método dentro del bloque try… catch de Java. Es porque la subclase puede lanzar la excepción si el objeto no se puede clonar.

Nota : La Objectclase es la superclase para todas las clases en Java. Por lo tanto, todas las clases y matrices pueden implementar el clone()método.

Articulos interesantes...