פורסם 2014 ביוני 611 שנים מחבר אין קשר ל-casting.אני מניח שכוונת המשורר הייתה לעבור חוליה חוליה ברשימה ולהעתיק אותו ולא להעתיק את ה-instance של הרשימה.את האמת לא הבנתי מה התכוונת, אני רק רוצה לדעת דבר אחד, איך אני יכול לעשות Clone לData, אני התבקשתי לעשות שכפול עמוק ככל האפשר, אני יכול לשכפל ListNode אבל אז הData של הListNode החדש יצביע על הData של הListNode הישן...מה אני אמור לעשות? תוכל רק לומר לי באיזו צורה אני אמור לשכפל את הData? או באיזה צורה לדעתך אני צריך לפעול בכדי לשכפל הכי עמוק שאפשר?תודה רבה אילי
פורסם 2014 ביוני 611 שנים אם ה-Data אינו בר שכפול אז אי אפשר לשכפל אותו - אין מה לעשות. הדבר הטוב ביותר שתוכל לעשות הוא להעתיק את הרפרנס אליו וזהו.אתה יכול לבדוק אם ה-Data הוא Cloneable ואם כן אז לשכפל אותו, אחרת פשוט להעתיק את הרפרנס - אבל לדעתי זה לא מומלץ, משום שזו התנהגות לא קונסיסטנטית (לחלק מהרשימות השכפול יהיה רדוד ולחלק יהיה שכפול עמוק). אתה יכול לעשות שאם ה-Data הוא לא Cloneable אז הפונקציה פשוט תזרוק חריגה. נערך 2014 ביוני 611 שנים על-ידי שניצל
פורסם 2014 ביוני 611 שנים מחבר אם ה-Data אינו בר שכפול אז אי אפשר לשכפל אותו - אין מה לעשות. הדבר הטוב ביותר שתוכל לעשות הוא להעתיק את הרפרנס אליו וזהו.אתה יכול לבדוק אם ה-Data הוא Cloneable ואם כן אז לשכפל אותו, אחרת פשוט להעתיק את הרפרנס - אבל לדעתי זה לא מומלץ, משום שזו התנהגות לא קונסיסטנטית (לחלק מהרשימות השכפול יהיה רדוד ולחלק יהיה שכפול עמוק). אתה יכול לעשות שאם ה-Data הוא לא Cloneable אז הפונקציה פשוט תזרוק חריגה.או, אוקיי, אז ניסיתי את זה, אבל אחרי שאני עושה את הבדיקה זה משאיר לי את השגיאה f(data instanceof Cloneable){ return data.clone(); }אותה שגיאה ממקודם...זאת הכוונה שלך (בצורה בסיסית)? נערך 2014 ביוני 611 שנים על-ידי Statement
פורסם 2014 ביוני 611 שנים א. לא מספיק לבדוק את הטיפוס, אתה צריך לעשות גם casting.ב. הפונקציה שלך לא "שלמה" - אתה צריך שיהיה לך return בכל המקרים, גם התנאי ב-if הוא שקר.
פורסם 2014 ביוני 611 שנים מחבר א. לא מספיק לבדוק את הטיפוס, אתה צריך לעשות גם casting.ב. הפונקציה שלך לא "שלמה" - אתה צריך שיהיה לך return בכל המקרים, גם התנאי ב-if הוא שקר.אוקיי נכון, גם אני חשבתי שצריך להיות Casting פשוט כמה הודעות למעלה אמרו לי שזה לא קשור, למה לעשות casting, לClonable?ניסיתי לעשות casting לcloneable וזה נותן לי באותו המקום את השגיאה הזאת"The method clone() is undefined for the type Cloneable."זה מה שאתה מתכוון (עדיין בכיוון כללי) if(data instanceof Cloneable){ Cloneable a=(Cloneable)data; return a.clone(); } else throw new CloneNotSupportedException(); }}תודה רבה רבה על העזרה
פורסם 2014 ביוני 611 שנים אכן אתה צודק. הממשק Cloneable לא באמת מגדיר פונקציה בשם clone אלא מסתמך על קיומה של הפונקציה Object.clone שהיא protected (בעמוד הקודם Gil28 נתן לינק למאמר שמסביר איך אמורים לממש אותה). מה שזה אומר הוא שאלא אם המחלקה מימשה את הפונקציה clone, הפכה אותה ל-public, ויש לך ביד את הטיפוס הקונקרטי שלה (כלומר לא מספיק לבדוק שהיא Cloneable, אתה חייב לדעת את הטיפוס האמיתי שלה) אז אין דרך להשתמש ב-clone, אלא אם אתה רוצה להשתמש ב-reflection ולעקוף את מנגנוני ההגנה האלה (מה שלא מומלץ).
פורסם 2014 ביוני 611 שנים מחבר אכן אתה צודק. הממשק Cloneable לא באמת מגדיר פונקציה בשם clone אלא מסתמך על קיומה של הפונקציה Object.clone שהיא protected (בעמוד הקודם Gil28 נתן לינק למאמר שמסביר איך אמורים לממש אותה). מה שזה אומר הוא שאלא אם המחלקה מימשה את הפונקציה clone, הפכה אותה ל-public, ויש לך ביד את הטיפוס הקונקרטי שלה (כלומר לא מספיק לבדוק שהיא Cloneable, אתה חייב לדעת את הטיפוס האמיתי שלה) אז אין דרך להשתמש ב-clone, אלא אם אתה רוצה להשתמש ב-reflection ולעקוף את מנגנוני ההגנה האלה (מה שלא מומלץ).אוקיי, אז באיזה צורה אני מגיע לClone של Data?למה לעשות את הCasting? יש לי אופציה למממש את הדרך שאמרתי שאני רוצה לפתור את התרגיל? אני רוצה באמת להשקיע ולעשות את הclone הכי עמוק שאני יכול... איך אני מגיע לזה שיש לו את השיטה? לעשות getClass().getMethods()? אני יעשה מה שתגיד לי, הבעיה שלי היא לעשות Clone לData...באמת תודה רבה על העזרה של כולכם עד עכשיו
פורסם 2014 ביוני 611 שנים ה-Casting הוא חסר משמעות - Cloneable לא מגדירה שום פונקציות, בפרט לא את clone (למשתנה מטיפוס Cloneable ולמשתנה מטיפוס Object יש את אותן פונקציות). כן, אתה יכול להגיע לשיטה clone באמצעות getClass().getMethods וכו' (זה מה שהתכוונתי ב-reflection) אבל כאמור זה פתרון לא הכי מומלץ, ואני בספק אם זה מה שהתכוונו אליו כותבי התרגיל.
פורסם 2014 ביוני 611 שנים מחבר ה-Casting הוא חסר משמעות - Cloneable לא מגדירה שום פונקציות, בפרט לא את clone (למשתנה מטיפוס Cloneable ולמשתנה מטיפוס Object יש את אותן פונקציות). כן, אתה יכול להגיע לשיטה clone באמצעות getClass().getMethods וכו' (זה מה שהתכוונתי ב-reflection) אבל כאמור זה פתרון לא הכי מומלץ, ואני בספק אם זה מה שהתכוונו אליו כותבי התרגיל.אז, אנחנו לא מגיעים לעיקר כל כך, באיזה דרך אני יכול להגיע לפתרון, אני צריך או בכלל יצליח לעשות Clone לData? אני הבנתי מההתכתבות ביננו שלא, ואז חשבתי אם הData הוא מסוג של Point לדוגמא, ולPoint יש בתוכו Clone משלו, אני סתם טועה, אז אני כן צריך לעשות Clone לData? אני רק התבלבלתי...אני התבקשתי בשאלה לעשות את הClone הכי עמוק שאני יכול, ואני גם חושב שReflection לא היה הכוונה, אז איך אני פותר את זה ? איך אני מגיע למצב שאני יכול לעשות Data.clone()? **אני לא מבקש שתפתור לי, אני רק צריך כיוון איך לבצע את הפעולה של Clone לData...אם תוכל לעזור לי אני אשמח, ואם אתה מעדיף שאני יעבור איתך לה"פ לא מפריע לי, העיקר שלא נספים את הפוסט... תודה רבה אילי נערך 2014 ביוני 611 שנים על-ידי Statement
פורסם 2014 ביוני 611 שנים אין צורך לצטט כל הודעה שאתה מגיב אליה, תשתמש בכפתור תגובה. זה ברור שאתה מגיב להודעה האחרונה.כאמור - בלי reflection אין פתרון (דהיינו תצטרך להעתיק את הרפרנס ולא לעשות clone). אתה יכול לפנות למי שנתן לך את התרגיל ולשאול אותו למה הכוונה.
פורסם 2014 ביוני 611 שנים מחבר אוקיי למדתי להבא, איך אני פותר את זה עם ריפלקטיון?אז אני בודק אם השיטה נמצאת, ואז מה אני עושה ? אני כבר יכול להשתמש בה? תודה רבה רבה אילי
פורסם 2014 ביוני 611 שנים כן, ראה דוגמה כאן:http://stackoverflow.com/a/14808344/2315863(תתעלם מהעובדה שמשתמשים פה בgenerics, פשוט תתייחס ל-T בתור Object)
ארכיון
דיון זה הועבר לארכיון ולא ניתן להוסיף בו תגובות חדשות.