This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
java:generics [2015/03/19 13:37] gthanos [Παραμετρικοί τύποι δεδομένων με πολλές παραμέτρους] |
java:generics [2015/03/19 13:46] gthanos [Απλοί παραμετρικοί τύποι δεδομένων (Raw Generic Types)] |
||
---|---|---|---|
Line 56: | Line 56: | ||
</code> | </code> | ||
Ο τύπος δεδομένων που χρησιμοποιούμε ανάμεσα στους χαρακτήρες '<', ΄>' είναι ο τύπος δεδομένων που επιτρέπεται να αποθηκευθεί στην κλάση //Box// κάθε φορά. | Ο τύπος δεδομένων που χρησιμοποιούμε ανάμεσα στους χαρακτήρες '<', ΄>' είναι ο τύπος δεδομένων που επιτρέπεται να αποθηκευθεί στην κλάση //Box// κάθε φορά. | ||
- | |||
- | Αντικείμενα της κλάσης Box ορίζονται συνήθως σε συνδυασμό με ένα reference τύπο δεδομένων, όπως δείξαμε προηγούμενα. Υπάρχει η δυνατότητα να ορίσετε ένα αντικείμενο της κλάσης //Box// χωρίς την χρήση της επιπλέον παραμέτρου, δηλ | ||
- | <code java> | ||
- | Box b = new Box() | ||
- | </code> | ||
- | Σε αυτή την περίπτωση ο compiler δεν είναι σε θέση να γνωρίζει τον τύπο δεδομένων που θα τοποθετήσετε στο συγκεκριμένο αντικείμενο. Ουσιαστικά η παραπάνω δήλωση ισοδυναμεί με μία δήλωση της μορφής | ||
- | <code java> | ||
- | Box<Object> b = new Box<Object>(); | ||
- | </code> | ||
- | Η προσπάθεια μεταγλώττισης του παρακάτω κώδικα καταδεικνύει το παραπάνω | ||
- | <code java BoxUsage.java> | ||
- | public class BoxUsage { | ||
- | public static void main(String args[]) { | ||
- | Box b = new Box(5); | ||
- | Box<Number> bn = new Box<Number>(); | ||
- | bn.set(b.get()); | ||
- | } | ||
- | } | ||
- | </code> | ||
- | Αν αλλάξετε την γραμμή ''Box<Number> bn = new Box<Number>();'' σε ''Box<Object> bn = new Box<Object>();'' το compilation error εξαφανίζεται και εμφανίζεται ένα warning. | ||
===== Ονοματολογία παραμέτρων ===== | ===== Ονοματολογία παραμέτρων ===== | ||
Line 153: | Line 133: | ||
===== Απλοί παραμετρικοί τύποι δεδομένων (Raw Generic Types) ===== | ===== Απλοί παραμετρικοί τύποι δεδομένων (Raw Generic Types) ===== | ||
- | Εάν δεν χρησιμοποιήσουμε καμία παράμετρο τότε καταλήγουμε να έχουμε έναν "απλό" παραμετρικό τύπο δεδομένων γνωστό ως **Raw types**. Η χρήση των τύπων αυτών δυσκολεύει τον compiler να αποφασίσει για την ασφαλή ή μη χρήση δεδομένων αυτού του τύπου, ειδικά όταν τα δεδομένα αυτά χρησιμοποιούνται μαζί με παραμετρικούς τύπους δεδομένων. Δείτε τα παρακάτω παραδείγματα κώδικα | + | Αντικείμενα της κλάσης Box ορίζονται συνήθως σε συνδυασμό με ένα reference τύπο δεδομένων, όπως δείξαμε προηγούμενα. Υπάρχει η δυνατότητα να ορίσετε ένα αντικείμενο της κλάσης //Box// χωρίς την χρήση της επιπλέον παραμέτρου, όπως παρακάτω. |
+ | <code java> | ||
+ | Box b = new Box() | ||
+ | </code> | ||
+ | |||
+ | Σε αυτή την περίπτωση καταλήγουμε να έχουμε έναν μη-παραμετρικό τύπο δεδομένων. Ο compiler δεν είναι σε θέση να γνωρίζει τον τύπο δεδομένων που θα τοποθετήσετε στο συγκεκριμένο αντικείμενο. Ουσιαστικά η παραπάνω δήλωση ισοδυναμεί με μία δήλωση της μορφής | ||
+ | <code java> | ||
+ | Box<Object> b = new Box<Object>(); | ||
+ | </code> | ||
+ | |||
+ | Η προσπάθεια μεταγλώττισης του παρακάτω κώδικα καταδεικνύει το παραπάνω | ||
+ | <code java BoxUsage.java> | ||
+ | public class BoxUsage { | ||
+ | public static void main(String args[]) { | ||
+ | Box b = new Box(5); | ||
+ | Box<Number> bn = new Box<Number>(); | ||
+ | bn.set(b.get()); | ||
+ | } | ||
+ | } | ||
+ | </code> | ||
+ | |||
+ | Αν αλλάξετε την γραμμή ''Box<Number> bn = new Box<Number>();'' σε ''Box<Object> bn = new Box<Object>();'' το compilation error εξαφανίζεται και εμφανίζεται ένα warning. | ||
+ | |||
+ | Η μη χρήση των παραμετρικών τύπων δεδομένων δυσκολεύει τον compiler να αποφασίσει για την ασφαλή ή μη ασφαλή χρήση των δεδομένων που θα αποθηκευτούν στην κλάση. Δείτε τα παρακάτω παραδείγματα κώδικα | ||
<code java> | <code java> | ||
Line 170: | Line 173: | ||
rawBox.set(8); // warning: unchecked invocation to set(T) | rawBox.set(8); // warning: unchecked invocation to set(T) | ||
</code> | </code> | ||
+ | |||
==== Unchecked Error Messages ==== | ==== Unchecked Error Messages ==== |