ב-Java Generics משתמשים בתווים כלליים כשאתה לא יודע את הסוג המדויק. הם מאפשרים לך לכתוב קוד גמיש וניתן לשימוש חוזר. התו הכללי מיוצג על ידי ? (סִימַן שְׁאֵלָה). תווים כלליים משמשים בעיקר בפרמטרים של שיטה כדי לקבל סוגים גנריים שונים בבטחה.
סוגי תווים כלליים ב-Java
1. תווים כלליים בעלי גבול עליון
ניתן להשתמש בתווים כלליים אלה כאשר אתה רוצה להרגיע את ההגבלות על משתנה. למשל נניח שאתה רוצה לכתוב שיטה שעובדת על List< Integer >רְשִׁימָה< Double >ורשימה< Number >אתה יכול לעשות זאת באמצעות תווים כלליים בעלי גבול עליון.
כדי להכריז על תו כללי עם גבולות עליון השתמש בתו הכללי ('?') ואחריו מילת המפתח extends ואחריה הגבול העליון שלו.
public static void add(List extends Number>רְשִׁימָה)
Java hasnext
יישום:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Upper Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); System.out.println('Total sum is:' + sum(list1)); // Double list List<Double> list2 = Arrays.asList(4.1 5.1 6.1); System.out.print('Total sum is:' + sum(list2)); } private static double sum(List extends Number> list) { double sum = 0.0; for (Number i : list) { sum += i.doubleValue(); } return sum; } }
תְפוּקָה
Total sum is:22.0 Total sum is:15.299999999999999
הֶסבֵּר: בתוכנית לעיל list1 מחזיקה ערכי מספר שלם ורשימה2 מכילה ערכי כפול. שניהם מועברים לשיטת הסכום המשתמשת בתו כללי extends Number>. זה אומר שהוא יכול לקבל כל רשימה מסוג שהיא תת-סיווג של Number כמו מספר שלם או כפול.
2. תווים כלליים תחת גבולות
הוא מבוטא באמצעות התו הכללי ('?') ואחריו מילת המפתח העל ואחריו הגבול התחתון שלה: super A>.
sql בחר בתור
תַחבִּיר: סוג אוסף super A>
יישום:
Javaimport java.util.Arrays; import java.util.List; class WildcardDemo { public static void main(String[] args) { // Lower Bounded Integer List List<Integer> list1 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list1); // Number list List<Number> list2 = Arrays.asList(4 5 6 7); // Integer list object is being passed printOnlyIntegerClassorSuperClass(list2); } public static void printOnlyIntegerClassorSuperClass( List super Integer> list) { System.out.println(list); } }
תְפוּקָה
[4 5 6 7] [4 5 6 7]
הֶסבֵּר: כאן השיטה printOnlyIntegerClassorSuperClass מקבלת רק Integer או מחלקות העל שלו (כמו Number). אם תנסה להעביר רשימה של Double זה נותן שגיאת זמן קומפילציה מכיוון ש-Double היא לא מחלקה-על של Integer.
prime no code ב-java
פֶּתֶק: השתמש בתו כללי הארכה כאשר אתה רוצה להוציא ערכים ממבנה ובתו כללי סופר כאשר אתה מכניס ערכים למבנה. אל תשתמש בתו כללי כאשר אתה מקבל ומכניס ערכים למבנה. אתה יכול לציין גבול עליון לתווים כלליים או שאתה יכול לציין גבול תחתון אבל לא ניתן לציין את שניהם.
3. תו כללי ללא גבולות
סוג התו הכללי הזה מצוין באמצעות התו הכללי (?) למשל List. זה נקרא רשימה של סוגים לא ידועים. אלה שימושיים במקרים הבאים -
- בעת כתיבת שיטה שניתן להשתמש בה באמצעות פונקציונליות הניתנת במחלקת Object.
- כאשר הקוד משתמש בשיטות במחלקה הגנרית שאינה תלויה בפרמטר הסוג
יישום:
Javaimport java.util.Arrays; import java.util.List; class unboundedwildcardemo { public static void main(String[] args) { // Integer List List<Integer> list1 = Arrays.asList(1 2 3); // Double list List<Double> list2 = Arrays.asList(1.1 2.2 3.3); printlist(list1); printlist(list2); } private static void printlist(List> list) { System.out.println(list); } }
תְפוּקָה
[1 2 3] [1.1 2.2 3.3]