¿Qué es la clonación en Java y sus tipos?



Este artículo sobre Clonación en Java le brindará información detallada sobre el proceso de Clonación y los diversos tipos de clonación admitidos por Java.

Durante la programación, a menudo nos encontramos con escenarios en los que necesitamos reutilizar una pieza completa de código. Reescribir el código hace que el programa sea voluminoso, al tiempo que disminuye la eficiencia del programa. Así, Java nos proporciona una característica excelente que nos rescata de esta gravosa tarea. Esto se conoce como Clonación en Java y, a través de este artículo, le daré una visión completa de ello.

A continuación se muestran los temas que discutiré en este artículo:





Clonación en Java

La clonación de objetos en Java es el proceso de crear una copia exacta del objeto original. En otras palabras, es una forma de crear un nuevo objeto copiando todos los datos y atributos del objeto original. Esto solo es posible implementando el método clone () del java.lang.Object clase. El método de clonación crea una copia exacta de un objeto para el que ha sidoinvoca en un orden de asignación de campo por campo y devolverá la nueva referencia de objeto . Una cosa que debe recordar, en Java, los objetos que implementan la interfaz de clonación, que es una interfaz de marcador, pueden usar clone ().

amplitud primer pseudocódigo del algoritmo de búsqueda

Ahora que conoce lo que es la clonación en Java, veamos varias ventajas de utilizar esta función.



Ventajas de la clonación en Java

A continuación, he enumerado algunas de las características más interesantes del uso de la clonación en Java.

  • Ayuda a reducir las líneas de código.
  • La forma más eficaz y eficiente de copiarobjetos.
  • Además, clone () se considera el método más rápido para copiar una matriz.

Nota: Aunque usar la clonación puede resultar en algunos problemas de diseño, si lo usa de una manera estratégica adecuada, puede beneficiarlo.

Tipos de clonación en Java

La clonación en Java se puede agruparen dos categorías:



  1. Clonación superficial
  2. Clonación profunda

Entendamos cada uno de ellos uno por uno.

Clonación superficial

En Java, cuando el proceso de clonación se realiza invocando el método clone (), se denomina Clonación superficial. Es el proceso de clonación predeterminado en Java donde se creará una copia superficial del objeto original con un campo exacto. En caso de que el objeto original tenga referencias a otros objetos como campos, solo se clonarán las referencias de ese objeto en lugar de la creación de un nuevo objeto. En otras palabras, si cambia el valor de los objetos clonados, también se reflejará en el original. Por tanto, la clonación superficial depende del objeto original.

copia superficial - Clonación en Java - EdurekaA continuación he dado el ejemplo del mismo:

paquete 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}} class 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} // Versión predeterminada del método clone () objeto protegido clone () lanza CloneNotSupportedException {return .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 {// Crear un clon de learner1 y asignarlo a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Imprimir detalles de Learner1 System.out.p rintln ('Detalles del alumno 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Nombre:' + learner1.learnerName) System.out.println ('Id. del curso: '+ learner1.eduCourse) // Imprimir todos los cursos de' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Imprimiendo detalles de Learner2 System.out.println ('Detalles de Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nombre:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Imprimiendo todos los 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) // Cambiar el curso3 de' learner2 'Learner2.eduCourse.course3 =' JSP '// Este cambio se reflejará en el System.out.println (' Learner1 'original) Cursos actualizados del alumno 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Salida:

Detalles del alumno 2: Id: 2811 Nombre: Id. De curso máximo: EduCourse @ 15db9742 Cursos del alumno 1: Microservicios de Java Spring Detalles del alumno 2: Id: 2811 Nombre: Id. De curso máximo: EduCourse @ 15db9742 Cursos del alumno 2: Microservicios de Java Spring Cursos actualizados del alumno 2: Java Spring JSP

Clonación profunda en Java

En Java, cuando el proceso de clonación se realiza mediante la implementación de la interfaz Cloneable, se denomina Clonación profunda. En este tipo de clonación se creará una copia exacta de todos los campos del objeto original. Pero en caso de que el objeto original tenga referencias a otros objetos como campos, también se creará una copia de esos objetos llamando al método clone (). Esto hace que el objeto clonado sea independiente del objeto original y cualquier cambio realizado en cualquiera de los objetos no se reflejará en el otro.

algoritmo de clasificación de combinación de c ++

A continuación he dado el ejemplo del mismo:

paquete edureka clase 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 () lanza CloneNotSupportedException { return super.clone ()}} clase 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} // Al reemplazar el método clone () para crear una copia profunda de un objeto protegido, clone () arroja CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} public class DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner learn er2 = null try {// Crear un clon de learner1 y asignarlo a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Imprimir detalles de Learner1 System.out. println ('Detalles del alumno 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Nombre:' + learner1.learnerName) System.out.println ('Id. del curso: '+ learner1.eduCourse) // Imprimir todos los cursos de' learner1 'System.out.println (' Courses of Learner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Imprimiendo detalles de Learner2 System.out.println ('Detalles de Learner 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nombre:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Imprimiendo todos los cursos de 'learner2' System.out.println ('Cursos of Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Cambiar el curso3 de 'learner2' learner2.eduCourse.course3 = 'JSP' // Este cambio no se reflejará en el original ' Learner1 'System.out.println (' Cursos del alumno 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Cursos actualizados de learner2 System.out.println ('Cursos de Learner 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Salida:

Detalles del alumno 2: Id: 2811 Nombre: Max Id. Del curso: edureka.EduCourse@15db9742 Cursos del alumno 1: Microservicios de Java Spring Detalles del alumno 2: Id: 2811 Nombre: Max Id. Del curso: edureka.EduCourse@6d06d69c Cursos del alumno 2 : Cursos de microservicios Java Spring del alumno 1: Cursos de microservicios Java Spring del alumno 2: Java Spring JSP

Esto nos lleva al final de este artículo sobre Clonación en Java. Si quieres saber más sobre Java puedes consultar nuestro .

que es echo en php

Ahora que ha entendido qué es una clonación en Java, consulte la por Edureka, una empresa de aprendizaje en línea de confianza con una red de más de 250.000 alumnos satisfechos repartidos por todo el mundo. El curso de formación y certificación Java J2EE y SOA de Edureka está diseñado para estudiantes y profesionales que desean ser desarrolladores de Java. El curso está diseñado para darle una ventaja en la programación de Java y capacitarlo para los conceptos básicos y avanzados de Java junto con varios marcos de Java como Hibernate y Spring.

Tienes una pregunta para nosotros? Menciónelo en la sección de comentarios de este artículo 'Clonación en Java' y nos comunicaremos con usted lo antes posible.