Como usar o método Clone para criar uma cópia superficial em Java

o clone método em Java cria manualmente uma cópia do objeto original e devolve-lo. Em muitos casos, esta é a maneira mais fácil de criar um clone. Mas e se sua classe tem uma centena ou mais campos que precisam ser duplicados?

A chance de esquecer de copiar um dos campos é alto, e se você adicionar um campo para a classe mais tarde, você pode esquecer de modificar o clone método para incluir o novo campo. Felizmente, você pode resolver esse problema usando o clone método do Objeto classe diretamente em seu próprio clone método.

o clone método do Objeto classe pode criar automaticamente uma cópia de seu objeto que contém cópias de todos os campos que são tipos primitivos (como int e duplo), Bem como cópias dos tipos de referência imutáveis ​​- mais notavelmente, strings. Então, se todos os campos em sua classe são ou primitivos ou cordas, você pode usar o clone método fornecido pela Objeto classe para clonar sua classe.

Este tipo de clone é conhecido como um cópia superficial.

Para chamar a clone método de seu próprio clone método, basta especificar super.clone (). Antes que você possa fazer isso, no entanto, você deve fazer duas coisas:

  • Declarar que a classe oferece suporte a Cloneable interface. o Cloneable interface é uma interface de marcação que não fornece quaisquer métodos. Ele simplesmente marca uma classe como sendo adequado para clonagem.

  • Coloque a chamada para super.clone () em um try / catch declaração de que captura a exceção CloneNotSupportedException. Essa exceção é lançada se você tentar chamar clone em uma classe que não implementa a Cloneable interface. Desde que você implementar Cloneable, esta excepção não vai acontecer, mas porque CloneNotSupportedException é uma exceção verificada, você deve pegá-lo.

Aqui está um exemplo de um Empregado classe com um método que utiliza o clone super.clone () para clonar-se:

classe Employee implementa Cloneable {// Campos e métodos omitidos ... clone public Object () {Employee emp-try {emp = (Employee) super.clone () -} catch (CloneNotSupportedException e) {return nulo-// nunca será acontecer} emp- retorno}}

Note-se que este método não tem de estar ciente de qualquer um dos campos no declarados Empregado classe. este clone método, no entanto, funciona apenas para classes cujos campos são todos ou tipos primitivos ou objetos imutáveis, como cordas.

menu