Aprende Java Aprende Php Aprende C++ Aprende HTML 5 Aprende JavaScript Aprende JSON Aprende MySQL Aprende SQLServer Aprende Visual Basic 6 Aprende PostgreSQL Aprende SQLite Aprende Redis Aprende Kotlin Aprende XML Aprende Linux VSC Aprende Wordpress Aprende Laravel Aprende VueJS Aprende JQuery Aprende Bootstrap Aprende Netbeans Aprende Android
Sigueme en Facebook Sigueme en Twitter Sigueme en Instagram Sigueme en Youtube Sigueme en TikTok Sigueme en Whatsapp
Home / Java / Duplicación de objetos con la Interface Cloneable

Duplicación de objetos con la Interface Cloneable

Por 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

Artículos similares

MVC Java y Base de Datos Tutorial

En post pasados [Ejemplo práctico de MVC java Swing con Netbeans, 3 en raya java con MVC y Netbeans , MVC: Modelo, Vista[...]

Script PHP – Mouse responde

«Mouse Responde…» simula ser un alma en pena que responde cualquier pregunta que le hagan, al estilo del juego de[...]

Utiliza 2 bases de datos diferentes en una aplicación parte I

Cuando se desarrolla una aplicación, puede ser un requisito que este tenga soporte para varias tipos de base de datos, s[...]

Búsqueda dinámica en JList

Un JList nos permite almacenar objetos en una lista y mostrarlos gráficamente en una serie vertical en el cual el usuari[...]

Compartir conexión de base de datos

Cuando utilizamos aplicaciones web con conexión a base de datos MYSQL, se suele crear una clase que gestione la interacc[...]

Descargar Doodle Google Pacman

Hace un par de años atras google para el aniversario del juego de Pacman saco un doodle en su homenaje, ese doodle que s[...]