Copiar objeto Java em instâncias diferentes

2 respostas
barcellosrod

Olá pessoal;
Gostaria de saber como faço para clonar um objeto java?
Já implementei a interface clonable mas nao adiantou…
Segue código:

public class Alle implements Cloneable{
	private String binId;
	private Turma turma;
	private Professor professor;
	private Disciplina disciplina;

	protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}

Se fizer:

Alelos p = alle.clone();

E apos alterar p, alle será alterado também…

Alguem sabe como posso resolver este problema?

Desde já agradeço

2 Respostas

ViniGodoy

O super.clone() não faz clone automático dos objetos, só de tipos primitivos.
Para objetos, ele clona apenas as referências.

Isso você tem que fazer na mão.

public class Alle implements Cloneable {
   private String binId;
   private Turma turma;
   private Professor professor;
   private Disciplina disciplina;

   @Override
   public Alle clone() {
      Alle clone = (Alle) super.clone(); //Clona os tipos primitivos (no caso, binId)

      //Clona o resto.
      clone.turma = turma.clone(); 
      clone.professor = professor.clone();
      clone.disciplina = disciplina.clone();
      return clone;        
   }
}

Claro, todo mundo deve ser clonável e implementar a mesma lógica.

Outra coisa. note como implementei o método clone:
1. Seu método clone, como está implementado, não deve lançar CloneNotSupportedException;
2. Seu método clone deve retornar o tipo da sua própria classe;
3. Seu método clone deve ser publico.

Isso deixa o código muito menos pentelho de usar, como fiz na clonagem de turma e professor. Se não for implementado assim, além de ter que dar try...catch naquele trecho, você ainda terá que fazer cast.

barcellosrod

Funcionou!!!
Muito obrigado pela ajuda!!!

Criado 22 de novembro de 2010
Ultima resposta 22 de nov. de 2010
Respostas 2
Participantes 2