top of page

Baixe grátis nossos e-books

Explore o mundo da Engenharia de Software e Data de forma mais eficiente e acessível com nossos eBooks!

  • Foto do escritorJP

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.

 

Material de estudo


Se quer aprender mais sobre o assunto e alcançar um alto nível de conhecimento, recomendo fortemente a leitura do(s) seguinte(s) livro(s):


Use a cabeça: Java é um clássico onde qualquer iniciante no assunto deve ler e estudar. Neste livro você aprenderá sobre os principais pilares de Java como, orientação a objetos, criação de classes, interfaces e seu funcionamento, controlar exceções, objetos genéricos e muito mais. Se quer entrar de cabeça neste mundo, é uma excelente opção!













Padrões de Projeto é um livro no qual recomendamos após alcançar uma certa maturidade em programação em geral. Escrito por grandes nomes do assunto e traduzido para o português, Padrões de Projeto ou Design patterns como também são conhecidos, são padrões e estratégias que te ajudará a resolver diferentes desafios arquiteturais, aplicando soluções de forma elegante.

São estratégias em que desenvolvedores de todo o mundo tem adotado em seus projetos. Imagina se você precisa atuar em um projeto internacional, caso este projetos tem adotado estratégias de Padrões de projeto, você não terá nenhuma grande dificuldade em entender a dinâmica e a arquitetura do código ou caso contrário, você mesmo poderá aplicar os conhecimentos adquiridos através deste livro.

O mais interessante que Padrões de Projeto independem de linguagem de programação, é possível aplicar em qualquer outra linguagem, ou seja, é um conteúdo 100% reutilizável.













Java Efetivo escrito por Joshua Bloch e traduzido para o português, é um livro excelente para aqueles que possuem um pouco mais de experiência com Java mas que precisam aprofundar em detalhes mais específicos da linguagem como, quando e como usar específicos Padrões de Projeto ou Design Patterns, utilização de Lambdas e Streams, concorrências e serializações. Para aqueles que possuem mais de experiência, é um excelente material de consulta.













E aí, curtiu? Até mais!

Posts recentes

Ver tudo

コメント


bottom of page