Un type énuméré est un type de données particulier qui permet à une variable de prendre une valeur parmi un ensemble de constantes prédéfinies.
La variable doit être égale à l'une des valeurs prédéfinies pour ce type.
Les exemples courants incluent 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 majuscules.
Dans le langage de programmation Java, on définit un type énuméré à l'aide du mot-clé enum.
Par exemple, on définit un type énuméré pour les jours de la semaine comme ceci :
public enum DayOfWeek {
SUNDAY,
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY
}
On utilise les types énumérés dès que l'on a besoin de représenter un ensemble fixe de constantes. Cela inclut les types énumérés naturels comme les planètes de notre système solaire, et 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, etc.
Voici du code qui montre comment utiliser le type énuméré DayOfWeek défini 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 du langage 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 du type énuméré 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
Dans cet exercice, tu vas traiter des lignes de log.
Chaque ligne de log est une string au format suivant : "[<LVL>]: <MESSAGE>".
Voici les différents niveaux de log :
TRC (trace)DBG (debug)INF (info)WRN (avertissement)ERR (erreur)FTL (fatal)Tu as trois tâches à réaliser.
Définis une enum LogLevel qui compte six éléments correspondant aux niveaux de log ci-dessus.
TRACEDEBUGINFOWARNINGERRORFATALEnsuite, implémente la méthode LogLine.getLogLevel() qui renvoie le niveau de log extrait d'une ligne de log :
var logLine = new LogLine("[INF]: File deleted");
logLine.getLogLevel();
// => LogLevel.INFO
Malheureusement, il arrive parfois que certaines lignes de log aient un niveau inconnu.
Pour traiter correctement ces lignes de log, ajoute un élément UNKNOWN à l'enum LogLevel, qui devra être renvoyé lors de l'analyse d'un niveau de log inconnu :
var logLine = new LogLine("[XYZ]: Overly specific, out of context message");
logLine.getLogLevel();
// => LogLevel.UNKNOWN
Le niveau de log d'une ligne de log est assez verbeux.
Pour réduire l'espace disque nécessaire pour stocker les lignes de log, on a mis au point un format court : "[<ENCODED_LEVEL>]:<MESSAGE>".
Le niveau de log encodé est une simple correspondance entre un niveau de log et un nombre :
UNKNOWN - 0
TRACE - 1
DEBUG - 2
INFO - 4
WARNING - 5
ERROR - 6
FATAL - 42
Implémente la méthode LogLine.getOutputForShortLog() qui produit la ligne de log au format raccourci :
var logLine = new LogLine("[ERR]: Stack Overflow");
logLine.getOutputForShortLog();
// => "6:Stack Overflow"
Inscris-toi sur Exercism pour apprendre et maîtriser Java avec 26 concepts158 exercices, et un vrai mentorat humain, le tout gratuitement.