Un type énuméré est un type de données particulier qui permet à une variable de prendre pour valeur l'une d'un ensemble de constantes prédéfinies.
La variable doit être égale à l'une des valeurs qui ont été prédéfinies pour ce type.
On en trouve couramment comme exemples les points cardinaux (les valeurs NORTH, SOUTH, EAST et WEST) et les jours de la semaine.
Comme ce sont des constantes, les noms des champs d'un type énuméré s'écrivent en lettres majuscules.
En Java, on définit un type énuméré à l'aide du mot-clé enum.
Par exemple, on déclare un type énuméré pour les jours de la semaine de cette façon :
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
Il faut utiliser un type énuméré chaque fois que l'on a besoin de représenter un ensemble fixe de constantes. Cela couvre les énumérations naturelles comme les planètes de notre système solaire, ou les ensembles de données dont on connaît toutes les valeurs possibles à la compilation : par exemple les choix d'un menu, les options de ligne de commande, et ainsi de suite.
Voici du code qui montre comment utiliser l'énumération DayOfWeek définie ci-dessus :
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"
Les types énumérés de Java sont bien plus puissants que leurs équivalents dans d'autres langages.
La déclaration enum définit une classe (appelée type énuméré).
Le corps de la classe d'énumération peut contenir des méthodes et d'autres champs :
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;
}
}
Appel de la méthode getNumberOfStars sur un membre du type énuméré Rating :
Rating.GOOD.getNumberOfStars();
// => 4
Le compilateur ajoute automatiquement quelques méthodes spéciales lorsqu'il crée une énumération.
Par exemple, elles possèdent une méthode statique values qui renvoie un tableau contenant toutes les valeurs de l'énumération, dans l'ordre de leur déclaration :
for (DayOfWeek dayOfWeek : DayOfWeek.values()) {
System.out.println(dayOfWeek.toString());
}
L'extrait ci-dessus affiche ceci :
SUNDAY
MONDAY
TUESDAY
WEDNESDAY
THURSDAY
FRIDAY
SATURDAY
Le compilateur ajoute aussi une méthode statique valueOf qui renvoie un membre de l'énumération à partir de son nom :
DayOfWeek.valueOf("SUNDAY");
// => DayOfWeek.SUNDAY