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!

Clonando objeto Java