This shows you the differences between two versions of the page.
|
java:generics_raw [2017/02/07 17:03] gthanos [Unchecked Error Messages] |
java:generics_raw [2017/02/07 17:03] |
||
|---|---|---|---|
| Line 1: | Line 1: | ||
| - | ====== Απλοί παραμετρικοί τύποι δεδομένων (Raw Generic Types) ====== | ||
| - | |||
| - | Όπως δείξαμε προηγούμενα, | ||
| - | |||
| - | <code java> | ||
| - | Box b = new Box(); | ||
| - | </ | ||
| - | |||
| - | Σε αυτή την περίπτωση καταλήγουμε να έχουμε έναν μη-παραμετρικό τύπο δεδομένων. Ο μεταγλωττιστής δεν είναι σε θέση να γνωρίζει τον τύπο δεδομένων που θα τοποθετήσετε στο συγκεκριμένο αντικείμενο. Ουσιαστικά η παραπάνω δήλωση ισοδυναμεί με μία δήλωση της μορφής. | ||
| - | |||
| - | <code java> | ||
| - | Box< | ||
| - | </ | ||
| - | |||
| - | Η προσπάθεια μεταγλώττισης του παρακάτω κώδικα καταδεικνύει το παραπάνω | ||
| - | <code java BoxUsage.java> | ||
| - | public class BoxUsage { | ||
| - | | ||
| - | Box b = new Box(5); | ||
| - | | ||
| - | | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Το μήνυμα που εμφανίζει ο μεταγλωττιστής για τον παραπάνω κώδικα είναι το εξής: | ||
| - | < | ||
| - | $> javac BoxUsage.java | ||
| - | BoxUsage.java: | ||
| - | | ||
| - | ^ | ||
| - | required: Number | ||
| - | found: Object | ||
| - | reason: actual argument Object cannot be converted to Number by method invocation conversion | ||
| - | where T is a type-variable: | ||
| - | T extends Object declared in class Box | ||
| - | Note: BoxUsage.java uses unchecked or unsafe operations. | ||
| - | Note: Recompile with -Xlint: | ||
| - | 1 error | ||
| - | </ | ||
| - | |||
| - | Αν αλλάξετε την γραμμή '' | ||
| - | |||
| - | ===== Unchecked Error Messages ===== | ||
| - | |||
| - | Η μη χρήση των παραμετρικών τύπων δεδομένων δυσκολεύει τον μεταγλωττιστή να αποφασίσει για την ασφαλή ή μη ασφαλή χρήση των δεδομένων που θα αποθηκευτούν στην κλάση. Η μίξη generics με raw types μπορεί να δημιουργήσει warnings της παρακάτω μορφής κατά την μεταγλώττιση. | ||
| - | |||
| - | < | ||
| - | Note: Example.java uses unchecked or unsafe operations. | ||
| - | Note: Recompile with -Xlint: | ||
| - | </ | ||
| - | |||
| - | Δείτε τα παρακάτω παραδείγματα κώδικα | ||
| - | |||
| - | <code java> | ||
| - | Box< | ||
| - | Box rawBox = stringBox; | ||
| - | </ | ||
| - | |||
| - | <code java> | ||
| - | Box rawBox = new Box(); | ||
| - | Box< | ||
| - | </ | ||
| - | |||
| - | <code java> | ||
| - | Box< | ||
| - | Box rawBox = stringBox; | ||
| - | rawBox.set(8); | ||
| - | </ | ||
| - | |||
| - | Το παρακάτω παράδειγμα είναι επίσης ενδεικτικό: | ||
| - | |||
| - | <code java WarningDemo.java> | ||
| - | public class WarningDemo { | ||
| - | public static void main(String[] args){ | ||
| - | Box< | ||
| - | bi = createBox(); | ||
| - | } | ||
| - | |||
| - | static Box createBox(){ | ||
| - | return new Box(); | ||
| - | } | ||
| - | } | ||
| - | </ | ||
| - | |||
| - | Μεταγλωττίζοντας με το flag '' | ||
| - | |||
| - | < | ||
| - | WarningDemo.java: | ||
| - | found : Box | ||
| - | required: Box< | ||
| - | bi = createBox(); | ||
| - | ^ | ||
| - | 1 warning | ||
| - | </ | ||
| - | |||
| - | |Προηγούμενο: | ||
| - | |||