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
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.
[code]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;
}
}
[/code]
Claro, todo mundo deve ser clonável e implementar a mesma lógica.
Outra coisa. note como implementei o método clone:
- Seu método clone, como está implementado, não deve lançar CloneNotSupportedException;
- Seu método clone deve retornar o tipo da sua própria classe;
- 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.
Funcionou!!!
Muito obrigado pela ajuda!!!