דילוג לתוכן המרכזי
מודול 6 · שיעור 2 מתוך 212/14 בקורס~15 min
שיעורי מודול (2/2)

כללי ב-Java

Generics (Generic Types) הוצגו ב-Java כדי לאפשר למחלקות, ממשקים ושיטות לפעול על סוגים שונים כפרמטרים. זה מבטיח בטיחות מסוג זמן קומפילציה ונמנע מהטלות מפורשות יקרות בזמן ריצה.

שיעורים כלליים

מחלקה גנרית מוגדרת באמצעות סוגריים זווית <T> כאשר T פועלת כמציין מיקום עבור סוג שיצוין כאשר המחלקה תופעל.

Java
public class Box<T> {
    private T content;

    public void setContent(T content) {
        this.content = content;
    }

    public T getContent() {
        return content;
    }
}

בעת יצירת אובייקט Box, אנו מציינים את הסוג בפועל:

Java
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!

שיטות גנריות

אתה יכול להגדיר שיטה גנרית אחת שיכולה לקבל פרמטרים מסוגים שונים. פרמטר הסוג ממוקם לפני סוג ההחזר של השיטה.

Java
public static <E> void printArray(E[] elements) {
    for (E element : elements) {
        System.out.println(element);
    }
}

תווים כלליים וסוגים מוגבלים

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

Java
public static <T extends Number> void processNumber(T number) {
    // Accepts Integer, Double, Float, etc.
    System.out.println(number.doubleValue());
}

נסה זאת בעצמך

פעילות גופנית#java.m6.l2.e1
ניסיונות: 0טוען...

השלם את המחלקה הגנרית Box על ידי הגדרת getValue() המחזיר T ו-setValue(T value) הקובע את ערך המשתנה הפרטי.

טוען עורך...
הצג רמז

כתוב את השיטות עם החתימה הנכונה באמצעות פרמטר הסוג הגנרי `T`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#java.m6.l2.e2
ניסיונות: 0טוען...

צור שיטה גנרית סטטית printArray שלוקח מערך מסוג T[] בשם array ומדפיס כל רכיב באמצעות לולאה לכל אחד.

טוען עורך...
הצג רמז

יש למקם את פרמטר הסוג `<T>` מיד אחרי `סטטי` ולפני סוג ההחזר `void`.

הפתרון זמין לאחר 3 ניסיונות

פעילות גופנית#java.m6.l2.e3
ניסיונות: 0טוען...

צור מחלקה סטטית StringContainer המיישמת את ממשק Container עם פרמטר עם String. הגדר בנאי שלוקח פרמטר String והטמיע את שיטת getItem()‎.

טוען עורך...
הצג רמז

החלף את הסוג הגנרי `T` ב`String` בחתימת המחלקה ובסוג ההחזר של `getItem()`.

הפתרון זמין לאחר 3 ניסיונות