Πριν προχωρήσω στα enums οι ίδιοι , είναι καλύτερο να τονίσει το πρόβλημα που ο νέος τύπος enum δημιουργήθηκε για να λύσει . Εξετάστε την ακόλουθη τάξη :
Ημερολόγιο δημόσια τάξη { int
dayOfWeek GO
δημόσια στατική τελική int Δευτέρα = 0
GO δημόσια στατική τελική int Τρίτη = 1
GO δημόσια στατική τελική int Τετάρτη = 2
GO ....
άκυρη setDayOfWeek ( ημερομηνία int) { ... } }
Η κατηγορία αυτή αποθηκεύει την ημέρα της εβδομάδας , χρησιμοποιώντας ένα σύνολο που απαριθμούνται σταθερές με ακέραιες τιμές από 0-7 , το καθένα αντιστοιχεί σε μια διαφορετική ημέρα , και αναμένεται ότι άλλοι προγραμματιστές που χρησιμοποιούν αυτή την κατηγορία θα χρησιμοποιήσει αυτές τις σταθερές όταν χρησιμοποιείτε την κλάση . Ωστόσο, τίποτα δεν επιβάλλει αυτό . Άλλες κατηγορίες θα μπορούσε να αγνοήσει τις σταθερές , χρησιμοποιούν τα δικά τους σταθερές ( ξεκινώντας με την Κυριακή , ίσως) κατά λάθος , ή ακόμη , ως αποτέλεσμα ενός σφάλματος , περνούν στο \\ " 8 \\ " ως ημέρα της εβδομάδας , πιθανώς επιτρέποντας σε έναν bug ώστε να προχωρήσει περαιτέρω από ό, τι θα έπρεπε. Είναι επίσης ιδιαίτερα κατατοπιστική σε debugging , καθώς η αξία των \\ " dayOfWeek \\ " θα πρέπει να τυπώνονται στην κονσόλα ή σε ένα πρόγραμμα εντοπισμού σφαλμάτων απλά ως έναν ακέραιο που πρέπει να ανευρεθεί στον πηγαίο κώδικα . Οι enums σχεδιαστεί για την αντιμετώπιση όλων αυτών των θεμάτων . Το παρακάτω είναι η ίδια τάξη , χρησιμοποιώντας το enum τύπος αντί ενός συνόλου που απαριθμούνται σταθερές:
Ημερολόγιο δημόσια τάξη {
Ημέρα δημόσια enum { ΔΕΥΤΕΡΑ ΤΡΙΤΗ, ΤΕΤΑΡΤΗ ΠΕΜΠΤΗ , ΠΑΡΑΣΚΕΥΗ, ΣΑΒΒΑΤΟ , ΚΥΡΙΑΚΗ
} Ημέρα dayOfWeek
άκυρη setDayOfWeek (Ημέρα δ) { ... } }
Το παραπάνω κώδικα , εκτός του ότι είναι πιο καθαρά και πιο ευανάγνωστο , αντιμετωπίζει όλα τα προβλήματα που αναφέρθηκαν παραπάνω με απαριθμούνται σταθερές . Οι πελάτες είναι πλέον αναγκασμένοι να χρησιμοποιούν μόνο τα απαριθμούνται οι ίδιοι τις αξίες και debuggers θα δείξει το όνομα του απογραφέντα αξία και όχι ένας ακέραιος . Επιπλέον, enums έχουν έναν αριθμό άλλων πλεονεκτημάτων . Για παράδειγμα, μπορούν να χρησιμοποιηθούν με το νέο χαρακτηριστικό για - κάθε βρόχος οποίο προστέθηκε σε Java 1.5.0. Η τάξη Ημερολόγιο θα μπορούσε να περιλαμβάνει τη μέθοδο όπως αυτή :
void printDays ( ) {
για ( Ημέρα d: Day.values ( ) ) {
System.out.println ( " Σήμερα " + δ)
GO
} }
Αυτή η μέθοδος θα επαναλάβει μέσω όλες τις ημέρες και να εκτυπώσετε τα ονόματά τους .
τα enums είναι μαθήματα στο δικό τους δικαίωμα, το οποίο σημαίνει ότι μπορούν να έχουν τις δικές τους μεθόδους και κατασκευαστές . Ας εξετάσουμε το ακόλουθο enum , το οποίο αποθηκεύει τους χαρακτήρες σε ένα παιχνίδι , που επιτρέπει με μια σύντομη περιγραφή αυτού του χαρακτήρα :
δημόσια enum Χαρακτήρας { />
MYSTERIOUS_WOMAN ( " Φορώντας ένα κόκκινο φόρεμα . » ) , />
ΑΝΤΑΓΩΝΙΣΤΗ ( " Στάζει κακό . ")?
String περιγραφή
GO />
this.description = />
} }
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα