Les énumérations (type Enum) #
Dans ce chapitre, nous allons aborder les énumérations. Il ne s’agit pas d’une spécificité de la POO, mais d’un type de données particulier. En Java, elles permettent de décrire un ensemble fixe de valeurs constantes prédéfinies.
Voici un exemple classique d’une énumération des jours de la semaine.
|
|
Voici l’équivalent en syntaxe BNF1:
Day ::= Monday | Tuesday | Wednesday | Thursday | Friday | Saturday | Sunday
L’énumération en Java est typesafe, contrairement aux énumérations C
.
|
|
|
|
Il s’agit en fait de classes dont les valeurs sont des singletons. Il est donc possible de les comparer avec l’opérateur ==
.
Day.Monday != Day.Friday // true
L’opérateur d’égalité est null-safe & type-safe
Day.Monday == "coucou"
ne compile pasDay.Monday == null
ne compile pas non plus
Son utilisation est possible dans une instruction switch
classique (cet exemple est tiré de la documentation d’Oracle):
|
|
Tout comme une expression switch
(Java 14) :
|
|
Il est également possible de définir des membres communs à chaque valeur.
|
|
Appel de la méthode surname
:
System.out.println( City.Penthalaz.surname() );
Les énumérations ne permettent pas de représenter des valeurs comportant des structures différentes comme il serait possible de le faire en Rust par exemple:
enum Status {
Cancelled { date: Date },
OutOfOrder { error_message: String },
Running
}
L’équivalent BNF se traduirait ainsi:
Status ::= Cancelled(Date) | OutOfOrder(String) | Running
Nous verrons plus tard comment réaliser ce genre d’énumérations spécifiques.