logo

שיבוט אובייקטים ב-Java

בנאי ב-javaה שיבוט אובייקטים היא דרך ליצור עותק מדויק של אובייקט. שיטת clone() של מחלקת Object משמשת לשכפול אובייקט.

ה ממשק java.lang.לשיבוט חייב להיות מיושם על ידי המחלקה שאת שיבוט האובייקט שלה אנחנו רוצים ליצור. אם אנחנו לא מיישמים ממשק שניתן לשבוט, השיטה clone() תיצור CloneNotSupportedException .

ה שיטת clone(). מוגדר במחלקה Object. התחביר של שיטת clone() הוא כדלקמן:

 protected Object clone() throws CloneNotSupportedException 

מדוע להשתמש בשיטת clone()?

ה שיטת clone(). שומר את משימת העיבוד הנוספת ליצירת העותק המדויק של אובייקט. אם נבצע זאת באמצעות מילת המפתח החדשה, ייקח זמן עיבוד רב לביצוע ולכן אנו משתמשים בשיבוט אובייקטים.

היתרון של שיבוט אובייקטים

אמנם ל-Object.clone() יש כמה בעיות עיצוב אבל זו עדיין דרך פופולרית וקלה להעתקת אובייקטים. להלן רשימה של יתרונות השימוש בשיטת clone():

  • אתה לא צריך לכתוב קודים ארוכים וחוזרים על עצמם. פשוט השתמש במחלקה מופשטת עם שיטת clone() של 4 או 5 שורות.
  • זוהי הדרך הקלה והיעילה ביותר להעתקת אובייקטים, במיוחד אם אנו מיישמים אותה על פרויקט שכבר פותח או ישן. פשוט הגדירו מחלקת אב, הטמיעו בה Cloneable, ספקו את ההגדרה של שיטת clone() והמשימה תתבצע.
  • Clone() היא הדרך המהירה ביותר להעתיק מערך.

חסרון של שיבוט אובייקטים

להלן רשימה של כמה חסרונות של שיטת clone():

  • כדי להשתמש בשיטת Object.clone() עלינו לשנות הרבה תחבירים בקוד שלנו, כמו הטמעת ממשק Cloneable, הגדרת שיטת clone() וטיפול ב- CloneNotSupportedException, ולבסוף, קריאה ל- Object.clone() וכו'.
  • עלינו ליישם ממשק שניתן לשכפל בזמן שאין בו שיטות כלשהן. אנחנו רק צריכים להשתמש בו כדי לומר ל-JVM שאנחנו יכולים לבצע clone() על האובייקט שלנו.
  • Object.clone() מוגן, ולכן עלינו לספק clone() משלנו ולקרוא ממנו באופן עקיף ל-Object.clone().
  • Object.clone() אינו מפעיל שום בנאי ולכן אין לנו כל שליטה על בניית אובייקט.
  • אם אתה רוצה לכתוב שיטת 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() מעתיק את הערכים של אובייקט לאחר. אז אנחנו לא צריכים לכתוב קוד מפורש כדי להעתיק את הערך של אובייקט לאחר.

אם ניצור אובייקט אחר על ידי מילת מפתח חדשה ונקצה לאובייקט זה ערכים של אובייקט אחר, זה ידרוש הרבה עיבוד על האובייקט הזה. אז כדי לשמור את משימת העיבוד הנוספת אנו משתמשים בשיטת clone() .