Què és la clonació a Java i els seus tipus?



Aquest article sobre la clonació a Java us proporcionarà informació detallada sobre el procés de clonació i els diversos tipus de clonació compatibles amb Java.

Mentre programem, sovint ens trobem amb escenaris en què hem de reutilitzar un tros de codi complet. La reescriptura del codi fa que el programa sigui voluminós, tot disminuint l’eficiència del programa. Per tant, Java ens proporciona una excel·lent característica que rescata d’aquesta tasca pesada. Això es coneix com a clonació a Java i, a través d’aquest article, us donaré informació completa sobre aquest tema.

A continuació es detallen els temes que tractaré en aquest article:





Clonació a Java

La clonació d'objectes a Java és el procés de crear una còpia exacta de l'objecte original. En altres paraules, és una manera de crear un nou objecte copiant totes les dades i atributs de l'objecte original. Això només és possible implementant el mètode clone () del fitxer java.lang.Objecte classe. El mètode de clonació crea una còpia exacta d'un objecte per al qual ha estatinvocat en un ordre d'assignació camp per camp i retornarà la nova referència d'objecte . Una cosa que heu de recordar, a Java, és que els objectes que implementen la interfície de clonació que és una interfície de marcador poden utilitzar el clon ().

Ara que ja sou conscient del que és la clonació a Java, vegem diversos avantatges d’utilitzar aquesta funció.



Avantatges de la clonació a Java

A continuació he enumerat algunes de les característiques més interessants de l’ús de la clonació a Java.

  • Ajuda a reduir les línies de codi.
  • La forma més eficaç i eficaç de copiarobjectes.
  • A més, es considera que el clon () és el mètode més ràpid per copiar una matriu.

Nota: Tot i que utilitzar la clonació pot resultar en problemes de disseny, però si l’utilitzeu d’una manera estratègica adequada us pot beneficiar.

Tipus de clonació a Java

La clonació a Java es pot agruparen dues categories:



  1. Clonació poc profunda
  2. Clonació profunda

Entenguem cadascun d’ells un per un.

java com acabar un programa

Clonació poc profunda

A Java, quan el procés de clonació es fa invocant el mètode clone (), s’anomena Shallow Cloning. És el procés de clonació per defecte a Java on es crearà una còpia superficial de l'objecte original amb un camp exacte. En cas que l’objecte original tingui referències a alguns altres objectes com a camps, només es clonaran les referències d’aquest objecte en lloc de crear objectes nous. En altres paraules, si canvieu el valor dels objectes clonats, també es reflectirà a l'original. Per tant, la clonació superficial depèn de l'objecte original.

còpia poc profunda - Clonació a Java - EdurekaA continuació he posat l'exemple del mateix:

package 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 implements Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // La versió per defecte del mètode clone () protegit Object clone () llança CloneNotSupportedException .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 learnner1 i assignar-lo a learnner2 Learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Detalls de la impressió de Learner1 System.out.p rintln ('Detalls de l'aprenent 2:') System.out.println ('Id:' + learnner1.eduId) System.out.println ('Nom:' + Learner1.learnerName) System.out.println ('Identificador del curs: '+ learner1.eduCourse) // Impressió de tots els cursos de' learner1 'System.out.println (' Cursos de l'aprenent 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Impressió de detalls de Learner2 System.out.println ('Detalls de l'aprenent 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nom:' + learner2.learnerName) System.out.println ('Identificador del curs:' + learner2.eduCourse) // Impressió de tots els cursos 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) // Canvi del curs3 de' learner2 'learner2.eduCourse.course3 =' JSP '// Aquest canvi es reflectirà a System.out.println original' learnner1 '(' Cursos actualitzats de l'aprenent 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Sortida:

Detalls de l'aprenent 2: identificador: 2811 nom: identificador màxim del curs: EduCourse @ 15db9742 cursos de l'aprenent 1: Java Spring Microservices Detalls de l'aprenent 2: identificador: 2811 nom: identificador màxim del curs: EduCourse @ 15db9742 cursos de l'aprenent 2: Java Spring Microservices Cursos actualitzats de l'aprenent 2: Java Spring JSP

Clonació profunda a Java

A Java, quan el procés de clonació es realitza mitjançant la implementació de la interfície Clonable, s’anomena Clonació profunda. En aquest tipus de clonació, es crearà una còpia exacta de tots els camps de l'objecte original. Però, en cas que l’objecte original tingui referències a altres objectes com a camps, també es crearà una còpia d’aquests objectes trucant al mètode clone (). Això fa que l’objecte clonat sigui independent de l’objecte original i els canvis que es facin en qualsevol objecte no es veuran reflectits a l’altre.

passar per valor a java

A continuació he posat l'exemple del mateix:

package edureka class EduCourse implements Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} clon d'objectes protegits () llança CloneNotSupportedException { return super.clone ()}} class EduLearner implements Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnnerName this.eduCourse = eduI El mètode Overclose clone () per crear una còpia profunda d'un objecte protegit Object clone () genera CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learnner}} classe pública 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 learnner1 i assignar-lo a learnner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Impressió de detalls de Learner1 System.out. println ('Detalls de l'aprenent 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Nom:' + learnner1.learnerName) System.out.println ('Identificador del curs: '+ learner1.eduCourse) // Impressió de tots els cursos de' learner1 'System.out.println (' Cursos de l'aprenent 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Impressió de detalls de Learner2 System.out.println ('Detalls de l'aprenent 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Nom:' + learner2.learnerName) System.out.println ('Identificador del curs:' + learner2.eduCourse) // Impressió de tots els cursos de 'learner2' System.out.println ('Cursos de l'aprenent 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Canvi del curs3 de 'learner2' learner2.eduCourse.course3 = 'JSP' // Aquest canvi no es reflectirà en l'original ' learner1 'System.out.println (' Cursos de l'aprenent 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. curs3) // Cursos actualitzats de l'aprenent2 System.out.println ('Cursos de l'aprenent 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Sortida:

Detalls de l'aprenent 2: Id: 2811 Nom: Id màxim del curs: edureka.EduCourse@15db9742 Cursos de l'aprenent 1: Java Spring Microservices Detalls de l'aprenent 2: Id: 2811 Nom: Id màxim del curs: edureka.EduCourse@6d06d69c Cursos de l'aprenent 2 : Java Spring Microservices Courses of Learner 1: Java Spring Microservices Courses of Learner 2: Java Spring JSP

Això ens porta al final d’aquest article sobre la clonació a Java. Si voleu saber més sobre Java, podeu consultar el nostre document .

Ara que ja heu entès què és una clonació a Java, consulteu el fitxer per Edureka, una empresa d'aprenentatge en línia de confiança amb una xarxa de més de 250.000 estudiants satisfets repartits per tot el món. El curs de formació i certificació de Java J2EE i SOA d’Edureka està dissenyat per a estudiants i professionals que vulguin ser desenvolupador de Java. El curs està dissenyat per donar-vos un avantatge en la programació de Java i formar-vos tant per a conceptes bàsics com avançats de Java, juntament amb diversos marcs Java com Hibernate i Spring.

Tens alguna pregunta? Si us plau, mencioneu-lo a la secció de comentaris d’aquest article “Clonació a Java” i us respondrem el més aviat possible.