java:generic_bounded_types

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

java:generic_bounded_types [2020/03/11 07:39]
gthanos [Άνω φραγμένοι παραμετρικοί τύποι (Upper Bounded Wildcards)]
java:generic_bounded_types [2020/03/11 07:40]
Line 1: Line 1:
-====== Φραγμένοι παραμετρικοί τύποι δεδομένων ====== 
- 
-Παρακάτω αναλύονται 3 υποκατηγορίες παραμετρικών τύπων δεδομένων 
-  * οι άνω φραγμένοι παραμετρικοί τύποι 
-  * οι κάτω φραγμένοι και  
-  * οι μη φραγμένοι 
- 
-===== Άνω φραγμένοι παραμετρικοί τύποι (Upper Bounded Wildcards) ===== 
- 
-<code java> 
-public static void process(List<? extends Number> list) { /*   */ } 
-</code> 
- 
-Στην παραπάνω δήλωση ο τύπος δεδομένων της παραμετρικής κλάσης ''java.util.List'' μπορεί να είναι η κλάση ''java.lang.Number'' η οποιαδήποτε υποκλάση της ''java.lang.Number'' (π.χ ''Integer'', ''Double'', ''Float''). Ο παραπάνω τύπος είναι φραγμένος προς τα πάνω. 
- 
-===== Κάτω φραγμένοι παραμετρικοί τύποι (Lower Bounded Wildcards) ===== 
- 
-<code java> 
-public static void addNumbers(List<? super Integer> list) { 
-    for (int i = 1; i <= 10; i++) { 
-        list.add(i); 
-    } 
-} 
-</code> 
- 
-Στην παραπάνω δήλωση ο τύπος δεδομένων της παραμετρικής κλάσης ''List'' μπορεί να είναι η κλάση ''Integer'' ή οποιαδήποτε υπερ-κλάση της ''Integer'' (π.χ ''Number''). 
- 
- 
-===== Μη φραγμένοι παραμετρικοί τύποι (Unbounded Wildcards) ===== 
- 
-Θα εξετάσουμε τους μη φραγμένους παραμετρικούς τύπους μέσα το παρακάτω παράδειγμα. 
-<code java> 
-public static void printList(List<Object> list) { 
-    for (Object elem : list) 
-        System.out.println(elem + " "); 
-    System.out.println(); 
-} 
-</code> 
- 
-Ο παραπάνω κώδικας τυπώνει αντικείμενα από μία λίστα αντικειμένων τύπου ''Οbject''. Λόγω των περιορισμών στην κληρονομικότητα που είδαμε προηγούμενα ο ίδιος κώδικας δεν μπορεί να χρησιμοποιηθεί για να τυπώσει αντικείμενα τύπου ''List<String>'' ή ''List<Integer>'' καθώς δεν μπορούμε να τοποθετήσουμε στην παράμετρο ''List<Object>'' ένα αντικείμενο άλλης κλάσης. Κατά συνέπεια θα χρειαστούμε ένα άλλο τρόπο γραφής της συγκεκριμένης κλάσης, ώστε να εκπληρώνει τη ζητούμενη γενικότητα. 
- 
-Αν θέλουμε να γράψουμε μία αρκετά γενική μέθοδο λίστας που να τυπώνει λίστες οποιουδήποτε αντικειμένου αρκεί να γράψουμε το παρακάτω 
- 
-<code java> 
-public static void printList(List<?> list) { 
-    for (Object elem: list) 
-        System.out.print(elem + " "); 
-    System.out.println(); 
-} 
-</code> 
- 
-Σε αναλογία με το παραπάνω, εάν θέλουμε να γράψουμε μία μέθοδο που να τυπώνει μόνο αριθμούς, αλλά όχι String (δηλαδή υποκλάσεις της //abstract// κλάσης ''Number'') τότε αρκεί να γράψουμε το παρακάτω: 
- 
-<code java> 
-public static void printΝumbers(List<? extends Number> list) { 
-    for (Number num: list) 
-        System.out.print(num + " "); 
-    System.out.println(); 
-} 
-</code> 
- 
-|Προηγούμενο: [[:java:generics_inheritance | Κληρονομικότητα Παραμετρικών Τύπων  ]] | [[:toc | Περιεχόμενα ]] | Επόμενο: [[:java:generic_bounded_types_inheritance | Σχέσεις κληρονομικότητας φραγμένων παραμετρικών τύπων δεδομένων  ]]| 
- 
- 
  
java/generic_bounded_types.txt · Last modified: 2020/03/11 07:40 (external edit)