Clonar un objeto en Java

Aryan Tyagi 12 octubre 2023
  1. Utilice el método directo para clonar un objeto en Java
  2. Utilice la función clone() para clonar un objeto en Java
  3. Utilice un constructor de copias para clonar un objeto en Java
Clonar un objeto en Java

La clonación de objetos es una técnica para hacer un duplicado exacto de un objeto. Crea una nueva instancia de la clase del objeto actual y llena todos sus campos con el contenido exacto de los campos del objeto actual.

En este tutorial, clonaremos un objeto en Java.

Utilice el método directo para clonar un objeto en Java

En este método, crearemos un nuevo objeto y asignaremos algún objeto previamente definido como su valor.

Vea el siguiente ejemplo.

public class shallowcopy implements Cloneable {
  int a, b;

  public static void main(String args[]) throws CloneNotSupportedException {
    shallowcopy d = new shallowcopy();
    d.a = 10;
    d.b = 12;
    shallowcopy dtwo = d;

    System.out.println("Original " + d.a);
    System.out.println(d.b);
    System.out.println("Shallow Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

Producción :

Original 10
12
Shallow Copy 10
12
Copy after modifying original
5

En el código anterior, modificamos el original y vimos los cambios reflejados en la copia creada. Este clon se llama copia superficial.

Antes de devolver una nueva instancia de la misma clase, la copia superficial produce una nueva instancia de la misma clase y copia sus campos. El contenido de un objeto se transfiere a un nuevo objeto en este procedimiento. Sin embargo, ambos objetos se refieren a los mismos valores, por lo que cualquier modificación realizada en los objetos vinculados se reflejará en otros. La clase de objeto tiene una función de clonación y una capacidad de copia superficial. La clase de objeto tiene una función de clonación y una capacidad de copia superficial.

Utilice la función clone() para clonar un objeto en Java

Para clonar un objeto, utilice el método clone() de la clase Object. Es la forma más rápida de duplicar un array.

La clase cuyo objeto clon deseamos generar debe implementar la interfaz Cloneable. Si la interfaz Cloneable no está implementada, la función clone() arroja una CloneNotSupportedException.

La función clone() elimina la necesidad de procesamiento adicional al hacer una réplica exacta de un objeto. Si lo hacemos usando new, llevará mucho tiempo procesarlo, por lo que usamos la clonación de objetos en su lugar. Lo usaremos para crear una copia profunda.

Cuando un elemento se duplica junto con los objetos a los que hace referencia, se denomina copia profunda. Cualquier cambio realizado en la copia no se refleja en el original.

Por ejemplo,

import java.util.ArrayList;
public class deepcopy implements Cloneable {
  int a, b;

  public Object clone() throws CloneNotSupportedException {
    return (deepcopy) super.clone();
  }
  public static void main(String args[]) throws CloneNotSupportedException {
    deepcopy d = new deepcopy();
    d.a = 10;
    d.b = 12;
    System.out.println("Original " + d.a);
    System.out.println(d.b);
    deepcopy dtwo = (deepcopy) d.clone();
    System.out.println("Deep Copy " + dtwo.a);
    System.out.println(dtwo.b);
    d.a = 5;
    System.out.println("Copy after modifying original");
    System.out.println(dtwo.a);
  }
}

Producción :

Original 10
12
Deep Copy 10
12
Copy after modifying original
10

En el ejemplo anterior, los cambios realizados en el original no se reflejan en la copia profunda.

Utilice un constructor de copias para clonar un objeto en Java

Un constructor inicializa un objeto de alguna clase. El constructor de copias puede crear un objeto duplicado de alguna clase.

Consulte el código a continuación para ver cómo inicializar dicha clase.

class copycon {
  public String cc;
  public copycon(String s) {
    this.cc = s;
  }
  public copycon(copycon different) {
    this.cc = different.cc; // copy constructor
  }
}
class Main {
  public static void main(String args[]) {
    copycon c1 = new copycon("abc");
    copycon c2 = new copycon(c1);
    System.out.println(c2.cc);
  }
}

Producción :

abc

Esto no lograría una clonación profunda en Java.

Artículo relacionado - Java Object