שיעור 9: Generics ו־variance
בלי Generics כל מבנה נתונים משתכפל: AppleBasket, OrangeBasket — או גרוע יותר, סל של object עם המרות מסוכנות בזמן ריצה. בשיעור הזה נכתוב מחלקה אחת עם פרמטר טיפוס <T>, ונבין מתי out ו-in מתירים להציב סל תפוחים במקום שמצפה לסל פירות.
Generics הם כמו תבנית אפייה אחת שממלאים כל פעם בבצק אחר — התבנית לא משתנה, רק התוכן. והכלל של הבטיחות פשוט: מארגז תפוחים בטוח להוציא "פרי", אבל אסור לזרוק לתוכו אבטיח.
- Generics ו־variance
- פרמטרי טיפוס מאפשרים למחלקה או ממשק אחד לשרת כל טיפוס בבטחה; variance (out/in) קובעת מתי תת־טיפוס רשאי להחליף טיפוס אב.
- פרמטר טיפוס <T>
- מציין־מקום לטיפוס שהקוד הקורא ממלא — Basket<Apple>, Basket<string> — והקומפיילר אוכף בזמן קומפילציה, בלי המרות.
- קו-וריאנטיות (out)
- כש-T מופיע רק כפלט, IProducer<Apple> מותר בתור IProducer<Fruit> — כל מה שיוצא הוא פרי. הכיוון ההפוך, in, מכסה T שרק נכנס.