====== Φραγμένοι παραμετρικοί τύποι δεδομένων ======
Παρακάτω αναλύονται 3 υποκατηγορίες παραμετρικών τύπων δεδομένων
* οι άνω φραγμένοι παραμετρικοί τύποι
* οι κάτω φραγμένοι και
* οι μη φραγμένοι
===== Άνω φραγμένοι παραμετρικοί τύποι (Upper Bounded Wildcards) =====
public static void process(List extends Number> list) { /* */ }
Στην παραπάνω δήλωση ο τύπος δεδομένων της παραμετρικής κλάσης ''java.util.List'' μπορεί να είναι η κλάση ''java.lang.Number'' η οποιαδήποτε υποκλάση της ''java.lang.Number'' (π.χ ''Integer'', ''Double'', ''Float''). Ο παραπάνω τύπος είναι φραγμένος προς τα πάνω.
===== Κάτω φραγμένοι παραμετρικοί τύποι (Lower Bounded Wildcards) =====
public static void addNumbers(List super Integer> list) {
for (int i = 1; i <= 10; i++) {
list.add(i);
}
}
Στην παραπάνω δήλωση ο τύπος δεδομένων της παραμετρικής κλάσης ''java.util.List'' μπορεί να είναι η κλάση ''java.lang.Integer'' ή οποιαδήποτε υπερ-κλάση της ''java.lang.Integer'' (π.χ ''java.lang.Object'').
===== Μη φραγμένοι παραμετρικοί τύποι (Unbounded Wildcards) =====
Θα εξετάσουμε τους μη φραγμένους παραμετρικούς τύπους μέσα το παρακάτω παράδειγμα.
public static void printList(List
Ο παραπάνω κώδικας τυπώνει αντικείμενα από μία λίστα αντικειμένων τύπου ''Οbject''. Λόγω των περιορισμών στην κληρονομικότητα που είδαμε προηγούμενα ο ίδιος κώδικας δεν μπορεί να χρησιμοποιηθεί για να τυπώσει αντικείμενα τύπου ''List'' ή ''List'' καθώς δεν μπορούμε να τοποθετήσουμε στην παράμετρο ''List