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.
¿Que necesitamos?
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.
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.
Paso 1. Implementando la interface Cloneable en nuestra clase Oveja:
Paso 2. Redefinir método clone
Clic derecho sobre nuestra clase Oveja -> Redefinir método…. -> Seleccionar la opción Clone y presionar [generar]
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.
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!!!
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! :)
Un ProgressDialog muestra una ventana con un texto y una barra de progreso que indica el tiempo que tarda una tarea en r...
Autenticación en una pagina web es el proceso de confirmar que un usuario es quien dice ser, asi de simple. En el siguie...
Entre las muchas aplicaciones que hay en la playstore de google están las galerías de fotos de chicas 🙂 que tantos nos e...
Segunda parte del tutorial «Crea un servicio web REST con PHP y MYSQL«, en esta segunda y ultima parte se completara la...
Los gráficos de torta, también llamados gráficos de 360 grados o circulares, son gráficos estadísticos que se utilizan p...
En este segundo post sobre Android y SQLite, veremos el uso de los métodos de gestión de base de datos más utilizados, e...
Si trabajas con redes sociales (RRSS) a continuación te muestro tres herramintas gratuitas que te ayudaran a la hora de...
Por lo general se usan transacciones a nivel base de datos y posteriormente se llaman estos a través de procedimientos a...
En este post, aprenderemos como conectar Visual Basic 6 con SQL Server, abrir una tabla, leer su contenido y mostrar est...
Lo que veremos en este post es la configuración del driver para PHP de SQL Server que ha creado Microsoft el cual permit...