- JP
Clonando objeto Java
A ideia de clonar um objeto serve para várias soluções
. Uma delas é quando você precisa passar um objeto por parâmetro, mesmo atribuindo a um novo objeto e este uma vez alterado, o objeto original também será alterado.
Em Java, os parâmetros são passados por valor, mas quando é utilizado uma variável de objeto as suas referências são de um objeto
Neste post vou mostrar uma das soluções quando você quer evitar que o objeto original não seja alterado. Para isso vamos utilizar a interface Cloneable.
A classe abaixo é um simples Pojo que implementa a interface Cloneable
public class Pessoa implements Cloneable{
public Long id;
public String nome;
public int idade;
public Pessoa(Long id, String nome, int idade){
this.id = id;
this.nome = nome;
this.idade = idade;
}
}
O próximo passo é sobrescrever o método clone. Para o exemplo vamos alterar o modificador de acesso de protected para public
public class Pessoa implements Cloneable{
public Long id;
public String nome;
public int idade;
public Pessoa(Long id, String nome, int idade){
this.id = id;
this.nome = nome;
this.idade = idade;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
A primeira parte já está pronta, agora vamos criar um exemplo que possamos entender melhor em como utilizar. No método alteraPessoa(Pessoa pessoa), vamos simular a passagem de parâmetro do objeto.
public static void main(String[] args)
Pessoa pessoa = new Pessoa(1L, "Monica", 18);
alteraPessoa(pessoa);
}
private static void alteraPessoa(Pessoa pessoa)
Pessoa pessoaAlterada = (Pessoa) pessoa.clone();
pessoaAlterada.id = 2L;
pessoaAlterada.nome = "Jorge";
pessoaAlterada.idade = 34;
System.out.println("Objeto original " + pessoa);
System.out.println("Objeto alterado " + pessoaAlterada);
}
No trecho a seguir é onde o método clone é chamado e atribuído o "clone" para o objeto pessoaAlterada
Pessoa pessoaAlterada = (Pessoa) pessoa.clone();
Pronto, seguindo estes passos o objeto original pessoa não será alterado pelo objeto pessoaAlterada em alterações posteriores.
Então é isso. Até mais!