שיעורי מודול (2/2)
כללי ב-Java
Generics (Generic Types) הוצגו ב-Java כדי לאפשר למחלקות, ממשקים ושיטות לפעול על סוגים שונים כפרמטרים. זה מבטיח בטיחות מסוג זמן קומפילציה ונמנע מהטלות מפורשות יקרות בזמן ריצה.
שיעורים כלליים
מחלקה גנרית מוגדרת באמצעות סוגריים זווית <T> כאשר T פועלת כמציין מיקום עבור סוג שיצוין כאשר המחלקה תופעל.
public class Box<T> {
private T content;
public void setContent(T content) {
this.content = content;
}
public T getContent() {
return content;
}
}בעת יצירת אובייקט Box, אנו מציינים את הסוג בפועל:
Box<Integer> integerBox = new Box<>();
integerBox.setContent(123);
int value = integerBox.getContent(); // No cast needed!שיטות גנריות
אתה יכול להגדיר שיטה גנרית אחת שיכולה לקבל פרמטרים מסוגים שונים. פרמטר הסוג ממוקם לפני סוג ההחזר של השיטה.
public static <E> void printArray(E[] elements) {
for (E element : elements) {
System.out.println(element);
}
}תווים כלליים וסוגים מוגבלים
אנו יכולים להגביל את הסוגים המקובלים על ידי גנרי באמצעות מילת המפתח extends (גבול עליון) כדי לקבל סוג מסוים או תת המחלקות שלו.
public static <T extends Number> void processNumber(T number) {
// Accepts Integer, Double, Float, etc.
System.out.println(number.doubleValue());
}נסה זאת בעצמך
השלם את המחלקה הגנרית Box על ידי הגדרת getValue() המחזיר T ו-setValue(T value) הקובע את ערך המשתנה הפרטי.
הצג רמז
כתוב את השיטות עם החתימה הנכונה באמצעות פרמטר הסוג הגנרי `T`.
הפתרון זמין לאחר 3 ניסיונות
צור שיטה גנרית סטטית printArray שלוקח מערך מסוג T[] בשם array ומדפיס כל רכיב באמצעות לולאה לכל אחד.
הצג רמז
יש למקם את פרמטר הסוג `<T>` מיד אחרי `סטטי` ולפני סוג ההחזר `void`.
הפתרון זמין לאחר 3 ניסיונות
צור מחלקה סטטית StringContainer המיישמת את ממשק Container עם פרמטר עם String. הגדר בנאי שלוקח פרמטר String והטמיע את שיטת getItem().
הצג רמז
החלף את הסוג הגנרי `T` ב`String` בחתימת המחלקה ובסוג ההחזר של `getItem()`.
הפתרון זמין לאחר 3 ניסיונות