O que é clonagem em Java e seus tipos?



Este artigo sobre Clonagem em Java fornecerá percepções detalhadas sobre o processo de clonagem e os vários tipos de clonagem suportados pelo Java.

Durante a programação, muitas vezes nos deparamos com cenários em que precisamos reutilizar uma parte completa do código. Reescrever o código torna o programa volumoso, ao mesmo tempo que diminui a eficiência do programa. Assim, Java nos fornece um excelente recurso que resgata é desta tarefa penosa. Isso é conhecido como Clonagem em Java e, por meio deste artigo, darei a você uma visão completa disso.

Abaixo estão os tópicos que irei discutir neste artigo:





Clonagem em Java

A clonagem de objetos em Java é o processo de criação de uma cópia exata do objeto original. Em outras palavras, é uma forma de criar um novo objeto copiando todos os dados e atributos do objeto original. Isso só é possível implementando o método clone () do java.lang.Object classe. O método clone cria uma cópia exata de um objeto para o qual foiinvocado em uma ordem de atribuição campo a campo e retornará a nova referência de objeto . Uma coisa que você deve lembrar, em Java, os objetos que implementam a interface clone, que é uma interface de marcador, podem usar o clone ().

java como terminar um programa

Agora que você está ciente do que é clonagem em Java, vamos ver várias vantagens de usar esse recurso.



Vantagens da clonagem em Java

A seguir, listei alguns dos recursos mais intrigantes do uso de clonagem em Java.

  • Ajuda a reduzir as linhas de código.
  • A maneira mais eficaz e eficiente de copiarobjetos.
  • Além disso, o clone () é considerado o método mais rápido para copiar um array.

Nota: Embora usar a clonagem possa resultar em alguns problemas de design, se você usá-la de uma maneira estratégica adequada, pode beneficiá-lo.

Tipos de clonagem em Java

A clonagem em Java pode ser agrupadaem duas categorias:



  1. Clonagem Rasa
  2. Clonagem Profunda

Vamos entender cada um deles um por um.

Clonagem Rasa

Em Java, quando o processo de clonagem é feito invocando o método clone (), ele é chamado de Clonagem superficial. É o processo de clonagem padrão em Java, onde uma cópia superficial do objeto original será criada com o campo exato. Caso o objeto original tenha referências a alguns outros objetos como campos, então apenas as referências desse objeto serão clonadas em vez da criação de um novo objeto. Em outras palavras, se você alterar o valor dos objetos clonados, ele também será refletido no original. Portanto, a clonagem superficial depende do objeto original.

classe mutável no exemplo java

cópia superficial - Clonagem em Java - EdurekaAbaixo, dei o mesmo exemplo:

pacote edureka class EduCourse {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3}} classe EduLearner implementa Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Versão padrão de clone () método protegido Object clone () throws super CloneNotSupported {returned .clone ()}} public class ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Criando um clone de learner1 e atribuindo-o a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Imprimindo detalhes de Learner1 System.out.p rintln ('Detalhes do aluno 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Nome:' + learner1.learnerName) System.out.println ('ID do curso: '+ learner1.eduCourse) // Imprimindo todos os cursos de' learner1 'System.out.println (' Cursos do aprendiz 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Imprimindo detalhes do aluno2 System.out.println ('Detalhes do aluno 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nome:' + learner2.learnerName) System.out.println ('Id do curso:' + learner2.eduCourse) // Imprimindo todos os cursos de 'learner2' System.out.println ('Cursos of Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Alterando o curso3 de' learner2 'learner2.eduCourse.course3 =' JSP '// Esta alteração será refletida no' learner1 'original System.out.println (' Cursos do aluno 2 atualizados: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Resultado:

Detalhes do aluno 2: Id: 2811 Nome: Max Course Id: EduCourse @ 15db9742 Cursos do aluno 1: Java Spring Microservices Detalhes do aluno 2: Id: 2811 Nome: Max Course Id: EduCourse @ 15db9742 Cursos do aluno 2: Java Spring Microservices Cursos do aluno 2 atualizados: Java Spring JSP

Clonagem profunda em Java

Em Java, quando o processo de clonagem é feito através da implementação da interface clonável, ele é denominado Clonagem profunda. Neste tipo de clonagem, será criada uma cópia exata de todos os campos do objeto original. Mas, no caso de o objeto original ter referências a outros objetos como campos, uma cópia desses objetos também será criada chamando o método clone (). Isso torna o objeto clonado independente do objeto original e quaisquer alterações feitas em qualquer um dos objetos não serão refletidas no outro.

como parar um programa java em código

Abaixo, dei o mesmo exemplo:

pacote edureka class EduCourse implementa Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} objeto protegido clone () throws CloneNotSupportedException { return super.clone ()}} class EduLearner implementa Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName = learnerName = este.eduCourse} Substituindo o método clone () para criar uma cópia profunda de um objeto protegido Object clone () lança CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () retornar o aluno}} classe pública DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microsserviços') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner aprender er2 = null try {// Criando um clone de learner1 e atribuindo-o a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Imprimindo detalhes de Learner1 System.out. println ('Detalhes do aluno 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Nome:' + learner1.learnerName) System.out.println ('ID do curso: '+ learner1.eduCourse) // Imprimindo todos os cursos de' learner1 'System.out.println (' Cursos do aprendiz 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Imprimindo detalhes do aluno2 System.out.println ('Detalhes do aluno 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nome:' + learner2.learnerName) System.out.println ('Id do curso:' + learner2.eduCourse) // Imprimindo todos os cursos de 'learner2' System.out.println ('Cursos do aluno 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Alterar o curso3 de 'aluno2' learner2.eduCourse.course3 = 'JSP' // Esta alteração não será refletida no original ' learner1 'System.out.println (' Cursos do aluno 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Cursos do aluno2 atualizados System.out.println ('Cursos do aluno 2:') System.out.println (learner2.eduCourse1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Resultado:

Detalhes do aluno 2: Id: 2811 Nome: Max Course Id: edureka.EduCourse@15db9742 Cursos do aluno 1: Java Spring Microservices Detalhes do aluno 2: Id: 2811 Nome: Max Course Id: edureka.EduCourse@6d06d69c Courses of Learner 2 : Cursos de microsserviços Java Spring do aluno 1: Cursos de microsserviços Java Spring do aluno 2: Java Spring JSP

Isso nos leva ao final deste artigo sobre clonagem em Java. Se você quiser saber mais sobre Java, consulte nosso .

Agora que você entendeu o que é clonagem em Java, confira o pela Edureka, uma empresa de aprendizagem online confiável com uma rede de mais de 250.000 alunos satisfeitos espalhados por todo o mundo. O curso de certificação e treinamento Java J2EE e SOA da Edureka é projetado para estudantes e profissionais que desejam ser um desenvolvedor Java. O curso foi elaborado para dar a você uma vantagem inicial na programação Java e treiná-lo para os conceitos básicos e avançados de Java, juntamente com várias estruturas Java como Hibernate e Spring.

Tem alguma questão para nós? Mencione isso na seção de comentários deste artigo “Clonagem em Java” e entraremos em contato com você o mais breve possível.