Boa noite pessoal,
Estou precisando trabalhar com clone de um objeto que possue uma profundidade até mais ou menos. Para não ter que implementar a interface clonable e sobrepor o método clone em todos os objetos associados no grafo, eu criei o seguinte método:
public static Object clonar(Serializable object){
try{
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(byteArrayOutputStream);
oos.writeObject(object);
oos.flush();
oos.close();
ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
Object retorno = objectInputStream.readObject();
objectInputStream.close();
byteArrayOutputStream.flush();
byteArrayOutputStream.close();
byteArrayInputStream.close();
return retorno;
}catch(Exception exe){
return exe.getMessage();
}
}
Dessa forma eu só faço os objetos associados implementarem a interface Serializable. Aparentemente está funcionando normal, ja depurei com o eclipse e consegui verificar que mesmo as coleções associadas com aquele primeiro objeto não estão utilizando a mesma referência de memória que o objeto retornado (o clone). Gostaria de saber se existe alguma restrição ou algum alerta que devo tomar cuidado ao utilizar o método ácima, ou, vocês acham que está tudo ok?
Como eu fiz esse método agora e ainda não o utilizei, eu pensei em postar aqui no guj porque derrepente tem algum “efeito colateral” desse método que eu não consegui enxergar.
Desde já obrigado a todos e qualquer opinião é muito bem vinda!