Clonagem Rasa → Altera um, altera outro. Clonagem Profunda → Só altera a si próprio ! Na Clonagem Profunda, você cria outros objetos, e cria novas referencias. Para clonarmos um objeto de forma rasa, basta implementarmos serializabe Clonagem Profunda → Consome mais memoria.
String é um objeto imutável, pois não existe NENHUM método que modifique a String. Desvantagens de ser imutável: – Ocupa mais espaço quando necessita-se fazer a alteração do seu conteudo Vantagens de ser Imutável: – Economia de espaço. Quando o objeto é criado e NÃO possui métodos para mudar seu conteúdo, este objeto então é imutável. (Date) This.nasc.Clone( ); → como é um objeto que implementa Clonable, podemos cloná-lo. Quando o objeto é imutável, DEVEMOS criar mais uma instancia do mesmo ! Ao pedir um clone, enviamos uma mensagem que é seriada e então chega a nós. Para clonarmos um objeto, precisamos, além de implementar Cloneable. Trabalhinho para a Aula ! '-' Clonar Aluno onde: Aluno → Clonagem rápida. Aluno Profundo → Clonagem Profunda Testar para ver se funcionou !
public class AlunoProfundoTest { @Test public void testClone() { funcionou !
//=================================> Verifica se a clonagem AlunoProfundo novoAlunoP; novoAlunoP = new AlunoProfundo(); novoAlunoP.setCurso("asah"); novoAlunoP.setDataNascimento(new Date()); novoAlunoP.setNome("Matheus"); novoAlunoP.setProntuario("0225154"); novoAlunoP.setTurma(123); AlunoProfundo novoClone; novoClone = (AlunoProfundo) novoAlunoP.clone(); //Faz a mesma bosta que TUDO LA ENCIMA --' assertEquals(novoClone, novoAlunoP); //Nテグ Sテグ OS MESMOS OBJETOS assertNotSame(novoClone, novoAlunoP);
profunda !
//=================================> Verifica se a clonagem テゥ
//Modifica a data de nascimento novoAlunoP.getDataNascimento().setTime(22255L); //Verifica se as Datas Sテ」o Doferentes assertNotSame(novoClone.getDataNascimento(), novoAlunoP.getDataNascimento()); //testando para ver se UM dos alunos se assertFalse(novoAlunoP.equals(novoClone)); //Verifica se as datas nao sao iguais assertFalse(novoClone.getDataNascimento().equals(novoAlunoP.getDataNascimento()) ); //Modificando os atributos de um dos Clones novoAlunoP = new AlunoProfundo(); novoAlunoP.setCurso("iii"); novoAlunoP.setDataNascimento(null); novoAlunoP.setNome("Rafinha"); novoAlunoP.setProntuario("5588747"); novoAlunoP.setTurma(556); //Verifica se alterar o clone nao altera o objeto em si assertFalse(novoClone.equals(novoAlunoP)); } }
public class AlunoProfundo implements Cloneable{ private private private private private
//
String prontuario; String nome; int turma; String curso; Date dataNascimento;
public Object clone(){ AlunoProfundo alunoProfundo = new AlunoProfundo(); alunoProfundo.setCurso(this.curso); alunoProfundo.setDataNascimento((Date) this.dataNascimento.clone()); alunoProfundo.setDataNascimento(this.dataNascimento); alunoProfundo.setNome(this.nome); alunoProfundo.setProntuario(this.prontuario); alunoProfundo.setTurma(this.turma); return alunoProfundo; }