Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube
JC Mouse Bolivia
Index / Java / Duplicando objetos con la Interface Cloneable

Duplicando objetos con la Interface Cloneable

Autor jc mouse jueves, marzo 21, 2019

En este post aprenderemos lo que es la clonación de objetos en java o lo que es lo mismo, generación de nuevas instancias independientes (nuevas copias) de un objeto y también cual la diferencia cuando una variable objeto es asignada a otra variable.

clon

¿Que necesitamos?

  • Java 8+
  • IDE Netbeans 8.2

Sin más que decir comencemos.

Por ejemplo si tuviéramos la siguiente clase

public class Oveja {

    private String nombre;

    public Oveja(String nombre) {
        this.nombre = nombre;
    }

    public Oveja() {
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public String toString() {
        return " [ " + nombre + " ] ";
    }
}

Y si creamos un objeto «oveja1» y luego otro objeto «oveja2» que hace referencia al primer objeto tenemos el siguiente codigo:

    public static void main(String[] args) {

        Oveja oveja1 = new Oveja("Dolly");
        Oveja oveja2 = oveja1;

        System.out.println("oveja 1 " + oveja1);
        System.out.println("oveja 2 " + oveja2);

        System.out.println("Modificando valores en 2");
        oveja2.setNombre("Lago Loza");
        System.out.println("oveja 1 " + oveja1);
        System.out.println("oveja 2 " + oveja2);
        
    }

Vemos como los cambios realizados en oveja2, se producen también en oveja1 dado de que ambos tienen la misma referencia.

output console

Pues bien, en ocasiones queremos crear una copia exacta de un objeto pero que este sea independiente, entonces para hacer una copia de un objeto debemos realizar dos pasos en nuestra clase Oveja.

  • Implementar la interface Cloneable
  • Redefinir método clone de la clase base Object

Paso 1. Implementando la interface Cloneable en nuestra clase Oveja:

implements cloneable

Paso 2. Redefinir método clone

Clic derecho sobre nuestra clase Oveja -> Redefinir método…. -> Seleccionar la opción Clone y presionar [generar]

clone method

Nuestra clase oveja queda de la siguiente forma:

public class Oveja implements Cloneable {

    private String nombre;

    public Oveja(String nombre) {
        this.nombre = nombre;
    }

    public Oveja() {
    }

    public String getNombre() {
        return nombre;
    }

    public void setNombre(String nombre) {
        this.nombre = nombre;
    }

    @Override
    public String toString() {
        return " [ " + nombre + " ] ";
    }

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }    
    
}

Finalmente implementamos nuestro objeto clonable con el primer ejemplo de este post:

    public static void main(String[] args) throws CloneNotSupportedException {

        Oveja oveja1 = new Oveja("Dolly");
        Oveja oveja2 = oveja1;

        System.out.println("Clonando oveja Dolly");
        Oveja oveja3 = (Oveja) oveja1.clone();        
        
        System.out.println("Modificando valores en oveja 2");
        oveja2.setNombre("Lago Loza");
        
        System.out.println("oveja 1 " + oveja1);
        System.out.println("oveja 2 " + oveja2);
        System.out.println("oveja 3 " + oveja3);
        
    }

Clonamos la oveja Dolly (oveja 1) antes de que oveja 2 que tiene referencia a ella, sea modificada y vemos al final como el nombre de Dolly se mantiene mientras este ha cambiado en los objetos referenciados.

china akita

Para terminar podemos decir que la clonación de objetos no es muy utilizada en la actualidad ya que esta sujeta a ciertas controversias en el mundo de la programación debido a ciertos comportamientos extraños en su implementación por lo que recomiendan otras alternativas a la clonación, sin embargo no hace daño saber que tenemos esta inteface Cloneable disponible en el JDK.

enjoy!!!

Tags

Si te ha gustado podrías compartirlo o dejar un comentario. ¡Muchas gracias!
Autor: JC Mouse

Yo soy yo :) JC Mouse, Soy orgullosamente boliviano soy fundador y CEO de la web jc-Mouse.net uno de las pocas web en emprendimiento y tecnología en Bolivia.

Toda la información que encuentres en este sitio es y sera completamente gratis siempre, puedes copiar, descargar y re-publicar si así lo deseas en otros blogs o sitios web, solo te pido a cambio que dejes una referencia a esta web. Esto nos ayuda a crecer y seguir aportando. Bye

Enjoy! :)

También Te Podría Interesar

Pon a prueba tu código con Android Studio

Pon a prueba tu código con Android Studio

Realizar pruebas sobre nuestro código nos permiten comprobar su correcto funcionamiento e integración con otros módulos...

Crea un efecto Flip en java swing

Crea un efecto Flip en java swing

Entre los correos y mensajes en facebook y whatsapp que me llegan (y de entrada pido perdón a quienes no puedo responder...

Procesamiento de imágenes en java con ImageMagick

Procesamiento de imágenes en java con ImageMagick

im4java es una interfaz pura de Java para la línea de comandos de ImageMagick. La interfaz de la línea de comandos de IM...

Transición de imágenes al estilo PowerPoint

Transición de imágenes al estilo PowerPoint

¿Qué es una transición? Una transición es un efecto de movimiento que se da entre una imagen y la siguiente en una prese...

Encriptación simétrica en java

Encriptación simétrica en java

En este post veremos un ejemplo sencillo de encriptación/desencriptación simétrica que el API de Java nos permite realiz...

Proteger documento PDF con contraseña y limitar permisos desde Java

Proteger documento PDF con contraseña y limitar permisos desde Java

Los archivos digitales (txt, docx, xlsx, odt, odp, pdf, etc) nos permiten almacenar información el cual en ocasiones, de...

Comparte lo que sabes

Categorias

Últimas entradas

El gigante tecnologico Google a puesto un bonito Doodle en su buscador que esta fascinando a sus millones de usuarios qu...

WhatsApp anuncio a través de su blog que ya se encuentra disponible la función de envío de fotos y videos TEMPORALES, es...

Muchas de las innovaciones computacionales de la NASA se desarrollaron para ayudar a explorar el espacio, pero ahora la...

TikTok es una plataforma de microvideos muy popular entre los jóvenes el cual cuenta ya con millones de videos cortps de...

Herramientas

Generador de Enlaces a Whatsapp