logo

Clonagem de objetos em Java

construtor em javaO clonagem de objetos é uma maneira de criar uma cópia exata de um objeto. O método clone() da classe Object é usado para clonar um objeto.

O Interface java.lang.Cloneable deve ser implementado pela classe cujo clone do objeto queremos criar. Se não implementarmos a interface Cloneable, o método clone() gera CloneNotSupportedException .

O Método clone() é definido na classe Object. A sintaxe do método clone() é a seguinte:

 protected Object clone() throws CloneNotSupportedException 

Por que usar o método clone()?

O Método clone() salva a tarefa de processamento extra para criar a cópia exata de um objeto. Se fizermos isso usando a palavra-chave new, levará muito tempo de processamento para ser executado, por isso usamos a clonagem de objetos.

Vantagem da clonagem de objetos

Embora Object.clone() tenha alguns problemas de design, ainda é uma maneira popular e fácil de copiar objetos. A seguir está uma lista de vantagens de usar o método clone():

  • Você não precisa escrever códigos longos e repetitivos. Basta usar uma classe abstrata com um método clone() de 4 ou 5 linhas.
  • É a forma mais fácil e eficiente de copiar objetos, principalmente se estivermos aplicando em um projeto já desenvolvido ou antigo. Basta definir uma classe pai, implementar Cloneable nela, fornecer a definição do método clone() e a tarefa estará concluída.
  • Clone() é a maneira mais rápida de copiar array.

Desvantagem da clonagem de objetos

A seguir está uma lista de algumas desvantagens do método clone():

  • Para usar o método Object.clone(), temos que alterar muitas sintaxes em nosso código, como implementar uma interface Cloneable, definir o método clone() e lidar com CloneNotSupportedException e, finalmente, chamar Object.clone() etc.
  • Temos que implementar uma interface clonável enquanto ela não contém nenhum método. Só precisamos usá-lo para informar à JVM que podemos executar clone() em nosso objeto.
  • Object.clone() é protegido, então temos que fornecer nosso próprio clone() e chamar indiretamente Object.clone() dele.
  • Object.clone() não invoca nenhum construtor, portanto não temos nenhum controle sobre a construção do objeto.
  • Se você deseja escrever um método clone em uma classe filha, todas as suas superclasses devem definir o método clone() nelas ou herdá-lo de outra classe pai. Caso contrário, a cadeia super.clone() falhará.
  • Object.clone() suporta apenas cópia superficial, mas precisaremos substituí-la se precisarmos de clonagem profunda.

Exemplo de método clone() (clonagem de objeto)

Vamos ver o exemplo simples de clonagem de objetos

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
Teste agora
 Output:101 amit 101 amit 
baixe o exemplo de clonagem de objeto

Como você pode ver no exemplo acima, ambas as variáveis ​​de referência têm o mesmo valor. Assim, o clone() copia os valores de um objeto para outro. Portanto, não precisamos escrever código explícito para copiar o valor de um objeto para outro.

Se criarmos outro objeto por meio da palavra-chave new e atribuirmos os valores de outro objeto a este, será necessário muito processamento neste objeto. Portanto, para salvar a tarefa extra de processamento, usamos o método clone().