מה עושים עם כל החריגות שclone מעיף לכל עבר?

מנהל: The Architect

נעול
0000
הודעות: 50
הצטרף: 22:37 09/12/2008

מה עושים עם כל החריגות שclone מעיף לכל עבר?

שליחה על ידי 0000 » 16:12 11/02/2009

כשאני קורא לclone של object מתוך individual הוא זורק חריגה
לכן אני צריך לממש את clone של individual ככה שיעיף אותה הלאה או שיתפל בה.
אם אני מעיף אותה הלאה ע"י זה שאני רושם throws בחתימה, כל פעם שאני קורא לclone של individual אני צריך שוב לטפל בה, הוא לא מתקמפל אחרת.
אז אני מניח שצריך לתפוס אותה ולא לזרוק אותה?
כי אז אני לא יודע מה להחזיר במקרה שנתקלתי בבעיה, הוא דורש ממני להחזיר ערך אם תפסתי חריגה, ראיתי בדוגמאות שהחזירו this... מה זה מחזיר אבל?? הוא לא יכול להחזיר individual .. זה בסדר לעשות ככה בכלל??

בל"ל
הודעות: 41
הצטרף: 21:11 21/11/2008

Re: מה עושים עם כל החריגות שclone מעיף לכל עבר?

שליחה על ידי בל"ל » 03:35 13/02/2009

amireluk כתב:כשאני קורא לclone של object מתוך individual הוא זורק חריגה
לכן אני צריך לממש את clone של individual ככה שיעיף אותה הלאה או שיתפל בה.
אם אני מעיף אותה הלאה ע"י זה שאני רושם throws בחתימה, כל פעם שאני קורא לclone של individual אני צריך שוב לטפל בה, הוא לא מתקמפל אחרת.
אז אני מניח שצריך לתפוס אותה ולא לזרוק אותה?
כי אז אני לא יודע מה להחזיר במקרה שנתקלתי בבעיה, הוא דורש ממני להחזיר ערך אם תפסתי חריגה, ראיתי בדוגמאות שהחזירו this... מה זה מחזיר אבל?? הוא לא יכול להחזיר individual .. זה בסדר לעשות ככה בכלל??
אין שום סיבה להשתמש ב throws

ואני מצטט מJAVA API
The method clone for class Object performs a specific cloning operation. First, if the class of this object does not implement the interface Cloneable, then a CloneNotSupportedException is thrown.
משמע, האקספשן המדובר עף אם ורק אם קוראים ל Object.clone() ממחלקה שאינה מממשת את Cloneable (אם לא מסתדר למה אני מדבר על Object ולא על super אזי יש צורך להשקיע טיפה מחשבה ממי יורש Individiual ולכן מי ה super שלו)

מאחר ואנו מממשים את הממשק Cloneable במחלקה Individual אזי אין חשש שהאקספשן הזה יעוף
אך מאחר והObject.clone() הוגדרה כ"זורקת CloneNotSupportedException" אזי בכל זאת חלה עלינו החובה לתפוס את האקספשן הנ"ל

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

hico
הודעות: 49
הצטרף: 19:21 06/12/2008

שליחה על ידי hico » 18:06 15/02/2009

עדיין לא הבנתי :(
למה תיתכן חריגה?
הבנתי איך אפשר לתפוס אותה אבל האם במידה שתיזרק שגיאה וניכנס לחלק של ה-catch - המערכת תמשיך לרוץ אחרי הבלוק של ה-try&catch? איך זה עובד?
ואז אם תיזרק שגיאה - ההעתק יישאר null - מה נחזיר? Null? :roll:

תודה רבה רבה!!

נעול

חזור אל “- מבוא למדעי המחשב”