חלוםמתוק31
New member
שאלה לגבי טיפוסים ג'נריים בשפת ג'אווה
אמנם אני יודע שהשאלה שלי היא בנושא "יחסית" מתקדם בג'אווה אבל אשמח לקבל תשובה עבורה (סיעפתי קצת את השאלה בתקווה שזה בסדר).
אנסה להסביר את השאלה כמה שיותר טוב ולפרט אותה בכמה דוגמאות.
1.קראתי שכאשר מכריזים ובונים אובייקט ג'נרי אז במידה ולא ציינתי את סוג האובייקט בצורה מפורשת בתוך סוגריים משולשות, למעשה מוצב שם טיפוס על "Object". מצד שני רשום שמקרה כזה פוגע ב- Safe Type". נתבונן בדוגמא הבאה:
הפונקציה שלמעלה לא מתקמפלת. לעומת זאת הפונקציה הבאה כן מתקמפלת:
האם אין פה סתירה? הרי נאמר שבמקרה ולא מוכרז שום טיפוס אז "מוצב" שם טיפוס Object
ואז המצב בפונקציה השנייה צריך להיות זהה למצב שבפונקציה הראשונה ולא להתקמפל. האם אני טועה?
2.בנוסף, "הצצתי" במימוש של ג'אווה למחלקה HashMap
ראיתי שם את המימוש הבא:
מה זה אומר סוגריים משולשות ריקות? איך זה מסתדר עם העובדה שהפונקציה מכריזה שהיא מחזירה <Node<K,V?
על זה בכלל לא מצאתי שום התייחסות.
3.עוד משהו אחד שקשור לטיפוסים כללים שאשמח לקבל עבורו התייחסות הוא קטע קוד נוסף מהמחלקה HashMap:
אמנם העתקתי את כל הפונקציה, אבל אני אני רוצה לדעת רק את משמעות הסוגרים המשולשות עם סימני השאלה.
בדרך כלל אחרי סימן שאלה צריך להופיע super או extend
אשמח להבין את המשמעות פה.
מתנצל מראש על ההעמסה. מציין שכשאני מנסה לשאול את השאלה ב- SO הם ישר כותבים duplicate, למרות שהם מנתבים לקישור שממש ממש לא עונה על הדקויות של השאלה שלי. אני מנסה להסביר להם את זה, אבל ברגע שהם מסמנים את זה כ- duplicate אפשר לדבר עם המנורה
תודה וחג שמח
קוד:
Public List<String> funcA()
{
return new ArrayList<Object>();
}
אנסה להסביר את השאלה כמה שיותר טוב ולפרט אותה בכמה דוגמאות.
1.קראתי שכאשר מכריזים ובונים אובייקט ג'נרי אז במידה ולא ציינתי את סוג האובייקט בצורה מפורשת בתוך סוגריים משולשות, למעשה מוצב שם טיפוס על "Object". מצד שני רשום שמקרה כזה פוגע ב- Safe Type". נתבונן בדוגמא הבאה:
קוד:
Public List<String> funcA()
{
return new ArrayList<Object>();
}
קוד:
Public List<String> funcA()
{
return new ArrayList();
}
ואז המצב בפונקציה השנייה צריך להיות זהה למצב שבפונקציה הראשונה ולא להתקמפל. האם אני טועה?
2.בנוסף, "הצצתי" במימוש של ג'אווה למחלקה HashMap
ראיתי שם את המימוש הבא:
קוד:
Node<K,V> newNode(int hash, K key, V value, Node<K,V> next) {
return new Node<>(hash, key, value, next);}
על זה בכלל לא מצאתי שום התייחסות.
3.עוד משהו אחד שקשור לטיפוסים כללים שאשמח לקבל עבורו התייחסות הוא קטע קוד נוסף מהמחלקה HashMap:
קוד:
public final boolean contains(Object o) {
if (!(o instanceof Map.Entry))
return false;
Map.Entry<?,?> e = (Map.Entry<?,?>) o;
Object key = e.getKey();
Node<K,V> candidate = getNode(hash(key), key);
return candidate != null && candidate.equals(e);
}
אמנם העתקתי את כל הפונקציה, אבל אני אני רוצה לדעת רק את משמעות הסוגרים המשולשות עם סימני השאלה.
בדרך כלל אחרי סימן שאלה צריך להופיע super או extend
אשמח להבין את המשמעות פה.
מתנצל מראש על ההעמסה. מציין שכשאני מנסה לשאול את השאלה ב- SO הם ישר כותבים duplicate, למרות שהם מנתבים לקישור שממש ממש לא עונה על הדקויות של השאלה שלי. אני מנסה להסביר להם את זה, אבל ברגע שהם מסמנים את זה כ- duplicate אפשר לדבר עם המנורה
תודה וחג שמח