Ποια είναι η έννοια της προειδοποίησης ασφαλείας που υπάρχουν σε ορισμένα γενόσημα φάρμακα Java ρίχνει;

ψήφοι
61

Ποια είναι η έννοια της προειδοποίησης Java ;

ασφάλεια Τύπος: Το καστ από την Αντικείμενο στη λίστα είναι στην πραγματικότητα τον έλεγχο κατά τη Λίστα τύπο σβημένη

Παίρνω αυτή την προειδοποίηση, όταν προσπαθώ να ρίξει ένα αντικείμενο σε έναν τύπο με γενικές πληροφορίες, όπως τον κωδικό:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Δημοσιεύθηκε 02/08/2008 στις 09:58
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
50

Η προειδοποίηση αυτή δεν υπάρχει, διότι Java δεν αποθηκεύει στην πραγματικότητα πληροφορίες για τον τύπο κατά το χρόνο εκτέλεσης σε ένα αντικείμενο που χρησιμοποιεί τα γενόσημα φάρμακα. Έτσι, αν objectείναι στην πραγματικότητα ένα List<String>, δεν θα υπάρχει ClassCastExceptionκατά το χρόνο εκτέλεσης, εκτός μέχρι ένα σημείο είναι προσβάσιμο από τη λίστα που δεν ταιριάζει με το γενικό τύπο που ορίζεται στη μεταβλητή.

Αυτό μπορεί να προκαλέσει περαιτέρω επιπλοκές, αν τα στοιχεία προστίθενται στη λίστα, με αυτήν την εσφαλμένη γενικές πληροφορίες για τον τύπο. Κάθε κωδικός εξακολουθεί να κατέχει μια αναφορά στη λίστα, αλλά με τη σωστή γενικές πληροφορίες τύπου θα έχουν τώρα μια ασυνεπή λίστα.

Για να αφαιρέσετε την προειδοποίηση, δοκιμάστε:

List<?> list = (List<?>) object;

Ωστόσο, σημειώστε ότι δεν θα είναι σε θέση να χρησιμοποιούν ορισμένες μεθόδους, όπως προσθέτουν, επειδή ο compiler δεν ξέρω αν προσπαθείτε να προσθέσετε ένα αντικείμενο από λανθασμένο τύπο. Το παραπάνω θα λειτουργήσει σε πολλές περιπτώσεις, αλλά αν πρέπει να χρησιμοποιήσετε την προσθήκη, ή κάποια παρόμοια περιορισμένο τρόπο, απλώς θα πρέπει να υποστούν την κίτρινη υπογράμμιση στο Eclipse (ή SuppressWarningσχολιασμός).

Απαντήθηκε 02/08/2008 στις 09:58
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more