logo

استنساخ الكائنات في جافا

منشئ في جافاال استنساخ الكائن هي طريقة لإنشاء نسخة طبق الأصل من الكائن. يتم استخدام طريقة clone () لفئة الكائن لاستنساخ كائن.

ال واجهة java.lang.Cloneable يجب أن يتم تنفيذه بواسطة الفصل الذي نريد إنشاء استنساخ كائنه. إذا لم نقم بتنفيذ واجهة قابلة للاستنساخ، فسيتم إنشاء طريقة clone() CloneNotSupportedException .

ال طريقة الاستنساخ (). تم تعريفه في فئة الكائن. بناء جملة طريقة clone () كما يلي:

 protected Object clone() throws CloneNotSupportedException 

لماذا تستخدم طريقة clone ()؟

ال طريقة الاستنساخ (). يحفظ مهمة المعالجة الإضافية لإنشاء النسخة الدقيقة من الكائن. إذا قمنا بتنفيذ ذلك باستخدام الكلمة الأساسية الجديدة، فسيستغرق تنفيذه الكثير من وقت المعالجة، ولهذا السبب نستخدم استنساخ الكائنات.

ميزة استنساخ الكائنات

على الرغم من أن Object.clone() به بعض مشكلات التصميم إلا أنه لا يزال وسيلة شائعة وسهلة لنسخ الكائنات. فيما يلي قائمة بمزايا استخدام طريقة clone ():

  • لا تحتاج إلى كتابة رموز طويلة ومتكررة. ما عليك سوى استخدام فئة مجردة باستخدام طريقة clone () المكونة من 4 أو 5 أسطر.
  • إنها الطريقة الأسهل والأكثر فعالية لنسخ الكائنات، خاصة إذا كنا نطبقها على مشروع تم تطويره بالفعل أو مشروع قديم. ما عليك سوى تحديد فئة أصل، وتنفيذ Cloneable فيها، وتوفير تعريف طريقة clone() وسيتم إنجاز المهمة.
  • Clone() هي أسرع طريقة لنسخ المصفوفة.

مساوئ استنساخ الكائنات

فيما يلي قائمة ببعض عيوب طريقة clone():

  • لاستخدام طريقة Object.clone()، يتعين علينا تغيير الكثير من صيغ التعليمات البرمجية الخاصة بنا، مثل تنفيذ واجهة قابلة للاستنساخ، وتحديد طريقة clone() والتعامل مع CloneNotSupportedException، وأخيرًا، استدعاء Object.clone() وما إلى ذلك.
  • يتعين علينا تنفيذ واجهة قابلة للاستنساخ بينما لا تحتوي على أي طرق. علينا فقط استخدامه لإخبار JVM أنه يمكننا تنفيذ clone() على كائننا.
  • Object.clone() محمي، لذلك يتعين علينا توفير clone() الخاص بنا واستدعاء Object.clone() منه بشكل غير مباشر.
  • Object.clone() لا يستدعي أي مُنشئ لذا ليس لدينا أي سيطرة على بناء الكائن.
  • إذا كنت تريد كتابة طريقة استنساخ في فئة فرعية، فيجب على جميع الفئات الفائقة الخاصة بها تحديد طريقة clone() فيها أو وراثتها من فئة أصل أخرى. وإلا فإن سلسلة super.clone() ستفشل.
  • يدعم Object.clone() النسخ الضحل فقط ولكننا سنحتاج إلى تجاوزه إذا كنا بحاجة إلى الاستنساخ العميق.

مثال على طريقة clone() (استنساخ الكائنات)

دعونا نرى المثال البسيط لاستنساخ الكائنات

 class Student18 implements Cloneable{ int rollno; String name; Student18(int rollno,String name){ this.rollno=rollno; this.name=name; } public Object clone()throws CloneNotSupportedException{ return super.clone(); } public static void main(String args[]){ try{ Student18 s1=new Student18(101,'amit'); Student18 s2=(Student18)s1.clone(); System.out.println(s1.rollno+' '+s1.name); System.out.println(s2.rollno+' '+s2.name); }catch(CloneNotSupportedException c){} } } 
اختبره الآن
 Output:101 amit 101 amit 
قم بتنزيل مثال استنساخ الكائنات

كما ترون في المثال أعلاه، كلا المتغيرين المرجعيين لهما نفس القيمة. وبالتالي، يقوم الاستنساخ () بنسخ قيم كائن إلى آخر. لذلك لا نحتاج إلى كتابة تعليمات برمجية صريحة لنسخ قيمة كائن إلى آخر.

إذا قمنا بإنشاء كائن آخر باستخدام كلمة رئيسية جديدة وقمنا بتعيين قيم كائن آخر لهذا الكائن، فسوف يتطلب الأمر الكثير من المعالجة على هذا الكائن. لذا، لحفظ مهمة المعالجة الإضافية، نستخدم طريقة clone().