De Feliwiki
/*
* CloneableBySerialization.java
*
* 25 de Maio de 2006, 13:52
*/
package br.eti.fml.struct;
import java.io.*;
/**
* É capaz de fazer uma cópia de si mesmo através
* de serialização na memória. Quem derivar desta classe faz
* com que o método {@link #clone()} faça uma cópia "inteira", profunda
* (deep copy) e não somente uma cópia superficial (shallow copy).
* Veja <a href="http://www.javabeat.net/qna/11-what-is-the-difference-between-cloneable-and-serialization-of-an-object/">What
* is the difference between cloneable and serialization of an object?</a>
* para entender a diferença.
*
* @author Felipe Micaroni Lalli (micaroni@gmail.com)
*/
public abstract class CloneableBySerialization<T>
implements java.io.Serializable
{
@SuppressWarnings("unchecked")
@Override
public T clone() {
T copia = null;
try {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeUnshared(this);
oos.close();
byte[] bytes = baos.toByteArray();
baos.close();
ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ObjectInputStream(bais);
copia = (T) ois.readUnshared();
ois.close();
bais.close();
} catch (Exception e) {
System.err.println(
"Erro ao clonar! Sou do tipo: " + this.getClass()
+ " e o tipo de erro foi: " + e);
e.printStackTrace();
}
return copia;
}
}
[editar] Veja também