Ano ang Pag-clone sa Java at mga Uri nito?



Ang artikulong ito sa Pag-clone sa Java ay magbibigay sa iyo ng detalyadong mga pananaw sa proseso ng Pag-clone at ang iba't ibang mga uri ng pag-clone na sinusuportahan ng Java.

Habang nagprogram, madalas na nakakakita kami ng mga sitwasyon kung saan kailangan naming muling magamit ang isang kumpletong piraso ng code. Ang muling pagsusulat ng code ay nagpapalaki ng programa, habang binabawasan ang kahusayan ng programa. Sa gayon, nagbibigay sa amin ang Java ng isang mahusay na tampok na kung saan ang mga pagliligtas ay mula sa mabibigat na gawaing ito. Kilala ito bilang Cloning sa Java at sa pamamagitan ng daluyan ng artikulong ito, bibigyan kita ng kumpletong pananaw dito.

Nasa ibaba ang mga paksang tatalakayin ko sa artikulong ito:





Pag-clone sa Java

Ang pag-clone ng object sa Java ay ang proseso ng paglikha ng isang eksaktong kopya ng orihinal na object. Sa madaling salita, ito ay isang paraan ng paglikha ng isang bagong bagay sa pamamagitan ng pagkopya ng lahat ng data at mga katangian mula sa orihinal na bagay. Posible lamang ito sa pamamagitan ng pagpapatupad ng clone () na pamamaraan ng java.lang.Object klase Lumilikha ang pamamaraang clone ng isang eksaktong kopya ng isang bagay kung saan ito naginginanyayahan sa isang patlang na order ng pagtatalaga ng larangan at ibabalik ang bagong sanggunian ng bagay . Ang isang bagay na dapat mong tandaan, sa Java, ang mga bagay na nagpapatupad ng interface ng clone na isang interface ng marker ay pinapayagan na gamitin ang clone ().

Ngayong may kamalayan ka sa kung ano ang pag-clone sa Java tingnan natin ang iba't ibang mga pakinabang ng paggamit ng tampok na ito.



Mga kalamangan ng Pag-clone sa Java

Sa ibaba ay nakalista ko ang ilan sa mga pinaka nakakaintriga na tampok ng paggamit ng pag-clone sa Java.

  • Mga tulong sa pagbawas ng mga linya ng code.
  • Ang pinaka-epektibo at mahusay na paraan ng pagkopyamga bagay
  • Gayundin, ang clone () ay itinuturing na pinakamabilis na pamamaraan upang makopya ang isang array.

Tandaan: Bagaman ang paggamit ng pag-clone ay maaaring magresulta sa ilang mga isyu sa disenyo ngunit kung gagamitin mo ito sa isang maayos na madiskarteng paraan maaari itong makinabang sa iyo.

Mga uri ng Pag-clone sa Java

Ang cloning sa Java ay maaaring mapangkatsa dalawang kategorya:



pmi-acp sulit
  1. Mababaw na Pag-clone
  2. Malalim na Pag-clone

Unawain natin isa-isa ang bawat isa sa kanila.

Mababaw na Pag-clone

Sa Java, kapag ang proseso ng pag-clone ay ginagawa sa pamamagitan ng pag-invoking ng clone () na pamamaraan tinawag itong shallow Cloning. Ito ang default na proseso ng pag-clone sa Java kung saan ang isang mababaw na kopya ng orihinal na bagay ay nilikha na may eksaktong patlang. Kung sakaling ang orihinal na bagay ay may mga sanggunian sa ilang iba pang mga bagay bilang mga patlang, pagkatapos ang mga sanggunian lamang ng bagay na iyon ang mai-clone sa halip na bagong paglikha ng bagay. Sa madaling salita, kung binago mo ang halaga ng mga na-clone na bagay pagkatapos ay masasalamin din ito sa orihinal. Kaya, ang mababaw na pag-clone ay nakasalalay sa orihinal na bagay.

mababaw na kopya - Pag-clone sa Java - EdurekaSa ibaba ay nagbigay ako ng halimbawa ng pareho:

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 implementing Cloneable {int eduId String natututo EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduCourse = eduCourse} // Default na bersyon ng clone () na pamamaraan na protektado ng object clone () itinapon ang cloneNotSupport .clone ()}} pampublikong klase na ShallowCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = bagong EduLearner (2811, 'Max' , j2ee) EduLearner learner2 = null try {// Lumilikha ng isang clone ng natututo1 at itatalaga ito sa natutunan2 natututo2 = (EduLearner) natutunan1.clone ()} mahuli (CloneNotSupportedException e) {e.printStackTrace ()} // Mga Detalye ng Pag-print ng Learnner1 System.out.p rintln ('Mga Detalye ng Nag-aaral 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Pangalan:' + learner1.learnerName) System.out.println ('Kurso Id: '+ learner1.eduCourse) // Pagpi-print ng lahat ng mga kurso ng' learner1 'System.out.println (' Courses of Learnner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Mga Detalye ng Pag-print ng Learnner2 System.out.println ('Mga Detalye ng Nag-aaral 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Pangalan:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Pagpi-print ng lahat ng mga kurso ng 'learner2' System.out.println ('Courses ng Learnner 2: ') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Pagbabago ng kurso3 ng' learner2 'learner2.eduCourse.course3 =' JSP '// Ang pagbabago na ito ay makikita sa orihinal na' learner1 'System.out.println (' Nai-update na Mga Kurso ng Nag-aaral 2: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse.course3)}}

Output:

Mga Detalye ng Nag-aaral 2: Id: 2811 Pangalan: Max Kurso Id: EduCourse @ 15db9742 Mga Kurso ng Nag-aaral 1: Java Spring Microservices Mga Detalye ng Nag-aaral 2: Id: 2811 Pangalan: Max Course Id: EduCourse @ 15db9742 Mga Kurso ng Learnner 2: Java Spring Microservices Nai-update na Kurso ng Nag-aaral 2: Java Spring JSP

Malalim na Pag-clone sa Java

Sa Java, kapag ang proseso ng pag-clone ay tapos na sa pamamagitan ng pagpapatupad ng Cloneable interface tinatawag itong Deep Cloning. Sa ganitong uri ng pag-clone, isang eksaktong kopya ng lahat ng mga patlang ng orihinal na bagay ang malilikha. Ngunit kung sakali, ang orihinal na bagay ay may mga sanggunian sa iba pang mga bagay bilang mga patlang kung gayon ang isang kopya ng mga bagay na iyon ay malilikha din sa pamamagitan ng pagtawag sa clone () na pamamaraan. Ginagawa nitong independyente ang na-clone na object sa orihinal na object at ang anumang mga pagbabago na ginawa sa alinman sa bagay ay hindi makikita sa isa pa.

Sa ibaba ay nagbigay ako ng halimbawa ng pareho:

package edureka class EduCourse nagpapatupad Cloneable {String course1 String course2 String course3 public EduCourse (String crs1, String crs2, String crs3) {this.course1 = crs1 this.course2 = crs2 this.course3 = crs3} protektadong Object clone () throws CloneNotSupportedx ibalik ang super.clone ()}} klase ng EduLearner ay nagpapatupad ng Cloneable {int eduId String learnerName EduCourse eduCourse public EduLearner (int eduId, String learnerName, EduCourse eduCourse) {this.eduId = eduId this.learnerName = learnerName this.eduContect Overriding clone () na pamamaraan para sa paglikha ng isang malalim na kopya ng isang bagay na protektado ng object clone () ay nagtatapon ng CloneNotSupportedException {EduLearner learner = (EduLearner) super.clone () learner.eduCourse = (EduCourse) eduCourse.clone () return aaral}} pampublikong klase DeepCloneSample {public static void main (String [] args) {EduCourse j2ee = new EduCourse ('Java', 'Spring', 'Microservices') EduLearner learner1 = bagong EduLearner (2811, 'Max', j2ee) EduLearner matuto er2 = null try {// Lumilikha ng isang clone ng learner1 at italaga ito sa learner2 learner2 = (EduLearner) learner1.clone ()} catch (CloneNotSupportedException e) {e.printStackTrace ()} // Mga Detalye ng Pag-print ng Learnner1 System.out. println ('Mga Detalye ng Nag-aaral 2:') System.out.println ('Id:' + learner1.eduId) System.out.println ('Pangalan:' + learner1.learnerName) System.out.println ('Kurso Id: '+ learner1.eduCourse) // Pagpi-print ng lahat ng mga kurso ng' learner1 'System.out.println (' Courses of Learnner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1. eduCourse.course2) System.out.println (learner1.eduCourse.course3) // Mga Detalye ng Pag-print ng Learnner2 System.out.println ('Mga Detalye ng Nag-aaral 2:') System.out.println ('Id:' + learner2.eduId ) System.out.println ('Pangalan:' + learner2.learnerName) System.out.println ('Course Id:' + learner2.eduCourse) // Pagpi-print ng lahat ng mga kurso ng 'learner2' System.out.println ('Courses ng aaral 2: ') System.out.println (learner2.eduCourse.course1) System.out.printl n (learner2.eduCourse.course2) System.out.println (learner2.eduCourse.course3) // Pagbabago ng kurso3 ng 'learner2' learner2.eduCourse.course3 = 'JSP' // Ang pagbabago na ito ay hindi makikita sa orihinal ' learner1 'System.out.println (' Courses of Learnner 1: ') System.out.println (learner1.eduCourse.course1) System.out.println (learner1.eduCourse.course2) System.out.println (learner1.eduCourse. course3) // Nai-update na Mga Kurso ng aaral2 System.out.println ('Mga Kurso ng Nag-aaral 2:') System.out.println (learner2.eduCourse.course1) System.out.println (learner2.eduCourse.course2) System.out. println (learner2.eduCourse.course3)}}

Output:

Mga Detalye ng Nag-aaral 2: Id: 2811 Pangalan: Max Kurso Id: edureka.EduCourse@15db9742 Mga Kurso ng Nag-aaral 1: Java Spring Microservices Mga Detalye ng Nag-aaral 2: Id: 2811 Pangalan: Max Course Id: edureka.EduCourse@6d06d69c Courses of Learnner 2 : Java Spring Microservices Mga Kurso ng Nag-aaral 1: Java Spring Microservices Mga Kurso ng Nag-aaral 2: Java Spring JSP

Dinadala tayo nito sa pagtatapos ng artikulong ito sa Pag-clone sa Java. Kung nais mong malaman ang tungkol sa Java maaari kang sumangguni sa aming .

Ngayon na naintindihan mo kung ano ang isang Pag-clone sa Java, tingnan ang ni Edureka, isang pinagkakatiwalaang kumpanya sa pag-aaral sa online na may isang network na higit sa 250,000 nasiyahan na mga nag-aaral na kumalat sa buong mundo. Ang kurso sa pagsasanay at sertipikasyon ng Java J2EE at SOA ng Edureka ay idinisenyo para sa mga mag-aaral at propesyonal na nais na maging isang Java Developer. Ang kurso ay dinisenyo upang bigyan ka ng isang panimula sa pag-program ng Java at sanayin ka para sa parehong core at advanced na mga konsepto ng Java kasama ang iba't ibang mga balangkas ng Java tulad ng Hibernate & Spring.

May tanong ba sa amin? Mangyaring banggitin ito sa seksyon ng mga komento ng artikulong 'Pag-clone sa Java' at babalikan ka namin sa lalong madaling panahon.