Por tanto, para resumir, si deseamos que una clase sea clonable: Implementar la interfaz Clonable. Superponer a clone(). Invocar a super.clone() dentro del clone() propio. Capturar las excepciones dentro del clone() propio. En estas cuatro líneas se resume todo este tema. Aprovecho para desearos un feliz 2020, y agradeceros el tiempo dedicado al blog.
Etiqueta: PASO Y RETORNO DE OBJETOS
Ejemplo de implementación del clonado
Un ejemplo que muestra las varias formas de implementar el clonado, y luego, como ser deshabilitado, más abajo, en la jerarquía: package com.gorka.clone; public class Ordinario { } package com.gorka.clone; //Superpone clone, pero no implementa Cloneable public class ClonErroneo extends Ordinario { public Object clone() throws CloneNotSupportedException { return super.clone(); } } package com.gorka.clone; //Hace…… Continúa leyendo Ejemplo de implementación del clonado
El constructor de copia (¿por qué no funciona en Java?)
El clonado puede parecer un proceso complicado de configurar. Podría parecer que debería haber alguna alternativa. Una alternativa que se le podría ocurrir a alguien (especialmente, si tiene conocimientos de C++) es hacer un constructor especial cuyo trabajo sea duplicar un objeto. En C++ a esto se le llama constructor de copia. Puede parecer una…… Continúa leyendo El constructor de copia (¿por qué no funciona en Java?)
Una copia en profundidad con ArrayList
Vamos a ver un ejemplo de como hacer una copia en profundidad, esta vez utilizando ArrayList. package com.gorka.clone; public class Entero2 implements Cloneable { private int i; public Entero2(int i) { this.i = i; } public void incrementar() { i++; } public Object clone() { Object objeto = null; try { objeto = super.clone(); }…… Continúa leyendo Una copia en profundidad con ArrayList
Las clases String y StringBuffer
Para recordar y revisar los métodos de la clase String, puedes hacer a la documentación en el siguiente enlace: Documentación clase String. Si has echado un vistazo a la documentación, puedes ver que todo método de String devuelve cuidadosamente un nuevo objeto String cuando es necesario cambiar su contenido. Date cuenta también que si los…… Continúa leyendo Las clases String y StringBuffer
Sobrecarga de «+» y el StringBuffer
Los objetos de la clase String están diseñados para ser inmutables, usando la técnica explicada en la entrada anterior. Si examinas la documentación de la clase String, verás que todo método de la clase que sólo aparenta modificar un String, verdaderamente crea y devuelve un objeto String completamente nuevo que contiene la modificación. El String original…… Continúa leyendo Sobrecarga de «+» y el StringBuffer
Los problemas de la inmutabilidad
Crear una clase inmutable parece en primera instancia proporcionar una solución ingeniosa. Sin embargo, siempre que se necesita un objeto modificado del tipo nuevo, tenemos que sufrir la sobrecarga debida a la creación del nuevo objeto, además de causar potencialmente más recolecciones de basura. En algunas clases, todo ésto no es un problema, pero en…… Continúa leyendo Los problemas de la inmutabilidad
Creando clases de sólo lectura
Es posible crear una clase de sólo lectura. Un ejemplo: package com.gorka.elorduy.inmutables; /** * * @author Gorka Elorduy */ public class Inmutable1 { private int datos; public Inmutable1(int valor){ datos = valor; } public int leer(){ return…… Continúa leyendo Creando clases de sólo lectura
Cómo controlar la clonabilidad
Para controlar la clonabilidad, se puede sugerir hacer private el método clone(). Recuerda que ésto no funcionaría, puesto que no se puede tomar un método de la clase base y hacerlo menos accesible en la clase derivada. También hay que poder controlar si se puede clonar el objeto. De hecho, en una clase que diseñemos…… Continúa leyendo Cómo controlar la clonabilidad
Como añadir la clonabilidad a lo largo de toda una jerarquía
Si creamos una clase nueva, su clase base por defecto es Object, y por tanto, no es clonable. Mientras no se añada explícitamente la clonabilidad, ésta no surgirá por si sola. Pero se puede añadir en cualquier capa y todos sus descendientes serán clonables. Por ejemplo: package com.gorkaelorduy.pasoobjetos; /** * * @author Gorka Elorduy */…… Continúa leyendo Como añadir la clonabilidad a lo largo de toda una jerarquía