• 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!

Posts recentes

Ver tudo