Cómo hacer que una clase sea clonable

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.

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