Clone  XML
Índice dos Fóruns » Java Avançado
Autor Mensagem
WadsonPJ
Smalltalk
[Avatar]

Membro desde: 10/10/2002 00:00:00
Mensagens: 3
Offline

Eu gostaria de saber como fazer um clone de um objeto. Fiz lgumas pesquisas e descobri que como o clone() é um método protected da classe Object ele deve ser sobrescrito. Tentei fazer o seguinte exemplo, mas infelizmente não deu certo. Será que alguem pode me ajudar? <BR> <BR> <BR>public class Circulo{ <BR> private Point origem; <BR> private double raio; <BR> public Object clone() { <BR> try { <BR> Circulo c = super.clone(); <BR> c.origem = origem.clone(); // Point deve ser clonável! <BR> return c; <BR> } catch (CloneNotSupportedException e) {return null;} <BR> } <BR>}
[WWW] [ICQ]
BaniPJ
JavaGuru
[Avatar]

Membro desde: 07/09/2002 00:00:00
Mensagens: 235
Offline

Você deve implementar o clone "manualmente" mesmo... <BR>Criar um novo objeto e ir fazendo uma cópia dos atributos, e caso algum seja um outro objeto, fazer a cópia recursivamente também. <BR>É o chamado "deep copy".
[WWW] aim icon [ICQ]
hipersoftPJ
JavaEvangelist
[Avatar]

Membro desde: 07/03/2003 00:00:00
Mensagens: 369
Offline

Só prá clarear. A cópia manual só é necessária se o clone for ´impuro´, e mesmo assim só dos membros que for desejado mudar. A chamada ao método clone() da classe Object através de super.close() faz todo o trabalho pesado. Observem os dois exemplos abaixo: <BR> <BR>/** <BR> * Versão da classe Teste que produz um clone ´puro´. <BR> * @author hipersoft <BR> */ <BR>public class Teste implements Cloneable <BR>{ <BR> int membro1; <BR> String membro2; <BR> <BR> /** <BR> * Construtor padrão. <BR> */ <BR> public Teste() <BR> { <BR> membro2 = "inicializado"; <BR> } <BR> <BR> /** <BR> * Cria um clone puro do objeto. <BR> * @return o clone <BR> */ <BR> public Object clone() throws CloneNotSupportedException <BR> { <BR> return super.clone(); <BR> } <BR> <BR> /** <BR> * Teste de unidade. <BR> */ <BR> public static void main(String args []) throws CloneNotSupportedException <BR> { <BR> Teste teste_original = new Teste(); <BR> Teste teste_clonado = (Teste) teste_original.clone(); <BR> // <BR> // dump do original <BR> // <BR> System.out.println(teste_original.membro1); <BR> System.out.println(teste_original.membro2); <BR> // <BR> // dump do clone <BR> // <BR> System.out.println(teste_clonado.membro1); <BR> System.out.println(teste_clonado.membro2); <BR> } <BR>} <BR> <BR>/** <BR> * Versão da classe Teste que produz um clone ´impuro´. <BR> * @author hipersoft <BR> */ <BR>public class Teste implements Cloneable <BR>{ <BR> int membro1; <BR> String membro2; <BR> <BR> /** <BR> * Construtor padrão. <BR> */ <BR> public Teste() <BR> { <BR> membro2 = "inicializado"; <BR> } <BR> <BR> /** <BR> * Cria um clone impuro do objeto. <BR> * @return o clone <BR> */ <BR> public Object clone() throws CloneNotSupportedException <BR> { <BR> Teste copia = (Teste) super.clone(); <BR> copia.membro1 = 3; <BR> copia.membro2 = "mudou valor"; <BR> returjn copia; <BR> } <BR> <BR> /** <BR> * Teste de unidade. <BR> */ <BR> public static void main(String args []) throws CloneNotSupportedException <BR> { <BR> Teste teste_original = new Teste(); <BR> Teste teste_clonado = (Teste) teste_original.clone(); <BR> // <BR> // dump do original <BR> // <BR> System.out.println(teste_original.membro1); <BR> System.out.println(teste_original.membro2); <BR> // <BR> // dump do clone <BR> // <BR> System.out.println(teste_clonado.membro1); <BR> System.out.println(teste_clonado.membro2); <BR> } <BR>} <BR>
[WWW] [ICQ]
 
Índice dos Fóruns » Java Avançado
Ir para:   
Powered by JForum 2.1.8 © JForum Team