Enums et méthodes d'Enum
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 50 sur 87.
Un enum (énumération) est un type de classe spécial qui représente un ensemble fixe de constantes. Au lieu d'utiliser des entiers ou des chaînes de caractères arbitraires pour représenter des options telles que les jours de la semaine ou les statuts de commande, les enums fournissent des valeurs lisibles et sécurisées au niveau du type (type-safe).
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Affiche : MONDAYLes enums sont plus que de simples constantes : ce sont des classes complètes. Vous pouvez leur ajouter des champs, des constructeurs et des méthodes :
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // Affiche : 20Chaque enum est fourni avec des méthodes intégrées utiles. La méthode values() retourne un tableau de toutes les constantes, tandis que valueOf() convertit une chaîne de caractères en la constante enum correspondante. La méthode ordinal() retourne la position de la constante (en commençant par 0) :
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // Convertit une chaîne en énumérationLes énumérations sont idéales lorsque vous avez un ensemble de valeurs connu et fixe qui ne changera pas au moment de l'exécution, ce qui rend votre code plus sûr et plus expressif que l'utilisation de simples constantes.
Défi
FacileConstruisons un système de commande pour un café qui met en avant la puissance des enums avec des champs, des constructeurs et des méthodes. Vous allez créer un enum CoffeeSize qui stocke les informations de prix et un système pour traiter les commandes des clients.
Vous organiserez votre code sur trois fichiers :
CoffeeSize.java: Créez un enum représentant les tailles de café avec les prix associés. Votre enum doit comporter trois constantes :SMALL,MEDIUMetLARGEavec des prix respectifs de2.50,3.50et4.50.Chaque taille nécessite un champ privé
price(double), un constructeur pour le définir et une méthodegetPrice()pour le récupérer. Ajoutez également une méthodegetDescription()qui renvoie une chaîne de caractères au format :[size name] - $[price](par exemple :SMALL - $2.5)Order.java: Créez une classe représentant une commande de café. Une commande possède deux champs privés :customerName(String) etsize(CoffeeSize). Incluez un constructeur pour initialiser les deux champs et des méthodes getter pour chacun.Ajoutez une méthode
getReceipt()qui renvoie une chaîne multi-lignes :Order for: [customerName] Size: [size description from getDescription()] Total: $[price from the size]Main.java: Donnez vie à votre café ! Vous recevrez deux entrées : un nom de client (String) et un nom de taille (String comme "SMALL", "MEDIUM" ou "LARGE").Tout d'abord, utilisez
CoffeeSize.valueOf()pour convertir la chaîne de taille en la constante enum correspondante. Créez un objet Order avec le nom du client et la taille, puis affichez le reçu.Après avoir affiché le reçu, affichez une ligne vide, puis affichez le menu complet en itérant sur toutes les valeurs de
CoffeeSizeà l'aide de la méthodevalues(). Pour chaque taille, affichez sa description sur une ligne distincte.
Vous recevrez deux entrées dans l'ordre : le nom du client et le nom de la taille (l'un des suivants : "SMALL", "MEDIUM" ou "LARGE").
Remarquez comment l'enum encapsule à la fois l'identité de la taille et son prix associé — c'est bien plus propre que d'utiliser des constantes séparées ou des nombres magiques partout dans votre code !
Aide-mémoire
Un enum est un type de classe spécial représentant un ensemble fixe de constantes, fournissant des valeurs lisibles et de type sécurisé (type-safe) :
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Affiche : MONDAYLes enums peuvent avoir des champs, des constructeurs et des méthodes :
enum Size {
SMALL(10), MEDIUM(20), LARGE(30);
private int price;
Size(int price) {
this.price = price;
}
public int getPrice() {
return price;
}
}
System.out.println(Size.MEDIUM.getPrice()); // Affiche : 20Méthodes d'énumération intégrées :
values()- retourne un tableau de toutes les constantes de l'enumvalueOf(String)- convertit une chaîne de caractères en la constante enum correspondanteordinal()- retourne la position de la constante (en commençant par 0)
for (Day d : Day.values()) {
System.out.println(d + " is at position " + d.ordinal());
}
Day day = Day.valueOf("FRIDAY"); // Convertit une chaîne en enumEssayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
// Lire les entrées
String customerName = scanner.nextLine();
String sizeName = scanner.nextLine();
// TODO: Convertir sizeName en enum CoffeeSize en utilisant valueOf()
// TODO: Créer une commande (Order) avec le nom du client et la taille
// TODO: Imprimer le reçu
// TODO: Imprimer une ligne vide
// TODO: Afficher le menu complet en itérant à travers toutes les valeurs de CoffeeSize
// Astuce : Utilisez CoffeeSize.values() pour obtenir toutes les constantes de l'enum
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur