Che cos'è la clonazione in Java e nei suoi tipi?



Questo articolo sulla clonazione in Java fornirà informazioni dettagliate sul processo di clonazione e sui vari tipi di clonazione supportati da Java.

Durante la programmazione, spesso ci imbattiamo in scenari in cui dobbiamo riutilizzare un pezzo di codice completo. La riscrittura del codice rende il programma ingombrante, il tutto diminuendo l'efficienza del programma. Pertanto, Java ci fornisce un'eccellente funzionalità che salva da questo compito gravoso. Questo è noto come Clonazione in Java e attraverso questo articolo, ti fornirò approfondimenti completi.

Di seguito sono riportati gli argomenti di cui parlerò in questo articolo:





Clonazione in Java

La clonazione di oggetti in Java è il processo di creazione di una copia esatta dell'oggetto originale. In altre parole, è un modo per creare un nuovo oggetto copiando tutti i dati e gli attributi dall'oggetto originale. Ciò è possibile solo implementando il metodo clone () di java.lang.Object classe. Il metodo clone crea una copia esatta di un oggetto per il quale è statoinvocato in un ordine di assegnazione campo per campo e restituirà il nuovo riferimento all'oggetto . Una cosa che devi ricordare, in Java, gli oggetti che implementano l'interfaccia clone che è un'interfaccia marker possono usare clone ().

cos'è hashmap in java

Ora che sei a conoscenza di cosa è la clonazione in Java, vediamo i vari vantaggi dell'utilizzo di questa funzione.



Vantaggi della clonazione in Java

Di seguito ho elencato alcune delle caratteristiche più intriganti dell'utilizzo della clonazione in Java.

  • Aiuta a ridurre le righe di codice.
  • Il modo più efficace ed efficiente per copiareoggetti.
  • Inoltre, clone () è considerato il metodo più veloce per copiare un array.

Nota: sebbene l'uso della clonazione possa causare alcuni problemi di progettazione, ma se lo usi in modo strategico appropriato, può avvantaggiarti.

Tipi di clonazione in Java

La clonazione in Java può essere raggruppatain due categorie:



  1. Clonazione superficiale
  2. Clonazione profonda

Comprendiamo ciascuno di essi uno per uno.

Clonazione superficiale

In Java, quando il processo di clonazione viene eseguito invocando il metodo clone (), viene chiamato Shallow Cloning. È il processo di clonazione predefinito in Java in cui verrà creata una copia superficiale dell'oggetto originale con il campo esatto. Nel caso in cui l'oggetto originale abbia riferimenti ad altri oggetti come campi, verranno clonati solo i riferimenti di quell'oggetto invece della creazione di un nuovo oggetto. In altre parole, se modifichi il valore degli oggetti clonati, si rifletterà anche nell'originale. Pertanto, la clonazione superficiale dipende dall'oggetto originale.

messaggio pop-up di script java

copia superficiale - Clonazione in Java - EdurekaDi seguito ho fornito l'esempio dello stesso:

pacchetto 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} // Versione predefinita del metodo clone () protected Object cloneNotExort .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 {// Creare un clone di learner1 e assegnarlo a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Stampa dei dettagli di Learner1 System.out.p rintln ('Details of Learner 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Course Id: '+ learner1.eduCourse) // Stampa di tutti i corsi di' 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) // Stampa dei dettagli di Learner2 System.out.println ('Dettagli dello studente 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Stampa di tutti i corsi di 'learner2' System.out.println ('Courses of Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Cambiare il corso3 di' learner2 'learner2.eduCourse.course3 =' JSP '// Questa modifica si rifletterà nell'originale' learner1 'System.out.println (' Corsi aggiornati dello studente 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Produzione:

Dettagli dello studente 2: Id: 2811 Nome: Max ID corso: EduCourse @ 15db9742 Corsi dello studente 1: Java Spring Microservices Dettagli dello studente 2: Id: 2811 Nome: Max ID corso: EduCourse @ 15db9742 Corsi dello studente 2: Java Spring Microservices Corsi aggiornati dello studente 2: Java Spring JSP

Clonazione profonda in Java

In Java, quando il processo di clonazione viene eseguito implementando l'interfaccia Clonabile, viene chiamato Deep Cloning. In questo tipo di clonazione verrà creata una copia esatta di tutti i campi dell'oggetto originale. Ma nel caso in cui l'oggetto originale abbia riferimenti ad altri oggetti come campi, verrà creata anche una copia di quegli oggetti chiamando il metodo clone (). Ciò rende l'oggetto clonato indipendente dall'oggetto originale e qualsiasi modifica apportata a uno qualsiasi degli oggetti non si rifletterà sull'altro.

invertire un numero in java

Di seguito ho fornito l'esempio dello stesso:

pacchetto 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} protected Object clone () genera 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 = leduseCourse L'override del metodo clone () per creare una copia completa di un oggetto protetto da Object clone () genera CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return learner}} classe pubblica DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = new EduLearner (2811, 'Max', j2ee) EduLearner impara er2 = null try {// Creare un clone di learner1 e assegnarlo a learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Stampa dei dettagli di Learner1 System.out. println ('Details of Learner 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Name:' + learner1.learnerName) System.out.println ('Course Id: '+ learner1.eduCourse) // Stampa di tutti i corsi di' 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) // Stampa dei dettagli di Learner2 System.out.println ('Dettagli dello studente 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Name:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Stampa di tutti i corsi di 'learner2' System.out.println ('Courses di Learner 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Modifica del corso3 di 'learner2' learner2.eduCourse.course3 = 'JSP' // Questa modifica non si rifletterà nell'originale ' 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) // Corsi aggiornati di learner2 System.out.println ('Courses of Learner 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Produzione:

Dettagli dello studente 2: Id: 2811 Nome: Max ID corso: edureka.EduCourse@15db9742 Corsi dello studente 1: Java Spring Microservices Dettagli dello studente 2: Id: 2811 Nome: Max ID corso: edureka.EduCourse@6d06d69c Corsi dello studente 2 : Corsi Java Spring Microservices dello studente 1: Corsi Java Spring Microservices dello studente 2: Java Spring JSP

Questo ci porta alla fine di questo articolo sulla clonazione in Java. Se vuoi saperne di più su Java puoi fare riferimento al nostro .

Ora che hai capito cos'è una clonazione in Java, controlla il file da Edureka, una società di formazione online affidabile con una rete di oltre 250.000 studenti soddisfatti sparsi in tutto il mondo. Il corso di formazione e certificazione Java J2EE e SOA di Edureka è progettato per studenti e professionisti che desiderano diventare sviluppatori Java. Il corso è progettato per darti un vantaggio nella programmazione Java e formarti per concetti Java sia di base che avanzati insieme a vari framework Java come Hibernate e Spring.

Hai domande per noi? Per favore, menzionalo nella sezione commenti di questo articolo 'Clonazione in Java' e ti risponderemo il prima possibile.