Java Language Obtenir un enum constant par nom


Exemple

Disons que nous avons une énumération DayOfWeek :

enum DayOfWeek {
    SUNDAY, MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY;
}

Un enum est compilé avec une méthode static valueOf() intégrée qui peut être utilisée pour rechercher une constante par son nom:

String dayName = DayOfWeek.SUNDAY.name();
assert dayName.equals("SUNDAY");

DayOfWeek day = DayOfWeek.valueOf(dayName);
assert day == DayOfWeek.SUNDAY;

Ceci est également possible en utilisant un type enum dynamique:

Class<DayOfWeek> enumType = DayOfWeek.class;
DayOfWeek day = Enum.valueOf(enumType, "SUNDAY");
assert day == DayOfWeek.SUNDAY;

Ces deux méthodes valueOf() lancent une IllegalArgumentException si l'énumération spécifiée n'a pas de constante avec un nom correspondant.

La bibliothèque Guava fournit une méthode d'assistance Enums.getIfPresent() qui retourne une Optional Guava pour éliminer la gestion des exceptions explicites:

DayOfWeek defaultDay = DayOfWeek.SUNDAY;
DayOfWeek day = Enums.valueOf(DayOfWeek.class, "INVALID").or(defaultDay);
assert day == DayOfWeek.SUNDAY;