Ένας τύπος enum είναι ένας ειδικός τύπος δεδομένων που επιτρέπει σε μια μεταβλητή να είναι ένα σύνολο προκαθορισμένων σταθερών.
Η μεταβλητή πρέπει να είναι ίση με μία από τις τιμές που έχουν προκαθοριστεί γι' αυτήν.
Συνήθη παραδείγματα περιλαμβάνουν τις διευθύνσεις της πυξίδας (τιμές όπως NORTH, SOUTH, EAST και WEST) και τις ημέρες της εβδομάδας.
Επειδή είναι σταθερές, τα ονόματα των πεδίων ενός τύπου enum γράφονται με κεφαλαία γράμματα.
Στη γλώσσα προγραμματισμού Java, ορίζεις έναν τύπο enum χρησιμοποιώντας τη λέξη-κλειδί enum.
Για παράδειγμα, θα όριζες έναν τύπο enum για τις ημέρες της εβδομάδας ως εξής:
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Θα πρέπει να χρησιμοποιείς τύπους enum κάθε φορά που χρειάζεται να αναπαραστήσεις ένα καθορισμένο σύνολο σταθερών. Αυτό περιλαμβάνει φυσικούς τύπους enum, όπως οι πλανήτες του ηλιακού μας συστήματος, καθώς και σύνολα δεδομένων όπου γνωρίζεις όλες τις πιθανές τιμές τη στιγμή της μεταγλώττισης, για παράδειγμα τις επιλογές σε ένα μενού, τις σημαίες της γραμμής εντολών και τα λοιπά.
Ορίστε κάποιος κώδικας που σου δείχνει πώς να χρησιμοποιήσεις το enum DayOfWeek που ορίστηκε παραπάνω:
public class Shop {
public String getOpeningHours(DayOfWeek dayOfWeek) {
switch (dayOfWeek) {
case MONDAY:
case TUESDAY:
case WEDNESDAY:
case THURSDAY:
case FRIDAY:
return "9am - 5pm";
case SATURDAY:
return "10am - 4pm"
case SUNDAY:
return "Closed.";
}
}
}
var shop = new Shop();
shop.getOpeningHours(DayOfWeek.WEDNESDAY);
// => "9am - 5pm"
Οι τύποι enum της γλώσσας προγραμματισμού Java είναι πολύ πιο ισχυροί από τους αντίστοιχούς τους σε άλλες γλώσσες.
Η δήλωση enum ορίζει μια κλάση (που ονομάζεται τύπος enum).
Το σώμα της κλάσης enum μπορεί να περιλαμβάνει μεθόδους και άλλα πεδία:
public enum Rating {
GREAT(5),
GOOD(4),
OK(3),
BAD(2),
TERRIBLE(1);
private final int numberOfStars;
Rating(int numberOfStars) {
this.numberOfStars = numberOfStars;
}
public int getNumberOfStars() {
return this.numberOfStars;
}
}
Καλώντας τη μέθοδο getNumberOfStars σε ένα μέλος του τύπου enum Rating:
Rating.GOOD.getNumberOfStars();
// => 4
Ο μεταγλωττιστής προσθέτει αυτόματα κάποιες ειδικές μεθόδους όταν δημιουργεί ένα enum.
Για παράδειγμα, έχουν μια στατική μέθοδο values που επιστρέφει έναν πίνακα που περιέχει όλες τις τιμές του enum με τη σειρά που δηλώνονται:
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
Το παραπάνω απόσπασμα θα εκτύπωνε τα εξής:
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
Ο μεταγλωττιστής προσθέτει επίσης μια στατική μέθοδο valueOf που επιστρέφει ένα μέλος του enum με βάση το όνομά του:
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY