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 comme les jours de la semaine ou les statuts de commande, les enums fournissent des valeurs lisibles et sûres du point de vue du typage.
enum Day {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY
}
Day today = Day.MONDAY;
System.out.println(today); // Affiche : MONDAYLes énumérations sont plus que de simples constantes : ce sont des classes à part entière. 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 énumération est accompagnée de méthodes intégrées utiles. La méthode values() renvoie un tableau de toutes les constantes, tandis que valueOf() convertit une chaîne en constante d’énumération correspondante. La méthode ordinal() renvoie la position de la constante (à partir de 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 enumLes énumérations sont idéales lorsque vous disposez d’un ensemble connu et fixe de valeurs qui ne changera pas lors 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 évidence la puissance des énumérations avec des champs, des constructeurs et des méthodes. Vous allez créer une énumération CoffeeSize qui stocke les informations de prix ainsi qu'un système permettant de traiter les commandes des clients.
Vous allez organiser votre code dans trois fichiers :
CoffeeSize.java: créez une énumération représentant les tailles de café avec leurs prix associés. Votre énumération doit comporter trois constantes :SMALL,MEDIUMetLARGE, avec des prix respectifs de2.50,3.50et4.50.Chaque taille doit avoir un champ
priceprivé (double), un constructeur pour lui attribuer une valeur et une méthodegetPrice()pour la récupérer. Ajoutez également une méthodegetDescription()qui renvoie une chaîne au format :[size name] - $[price](par exemple :SMALL - $2.5)Order.java: créez une classe représentant une commande de café. Un Order possède deux champs privés :customerName(String) etsize(CoffeeSize). Incluez un constructeur pour initialiser les deux champs ainsi que des méthodes getter pour chacun d'eux.Ajoutez une méthode
getReceipt()qui renvoie une chaîne composée de plusieurs 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").Commencez par utiliser
CoffeeSize.valueOf()pour convertir la chaîne de taille en constante d'énumération correspondante. Créez un 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 parcourant 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 suivant : le nom du client et le nom de la taille (l'une des valeurs "SMALL", "MEDIUM" ou "LARGE").
Remarquez comment l'énumération encapsule à la fois l'identité de la taille et son prix associé, ce qui est beaucoup plus propre que d'utiliser des constantes distinctes ou des nombres magiques dans tout votre code !
Essayez 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 un Order avec le nom du client et la taille
// TODO: Afficher le reçu
// TODO: Afficher une ligne vide
// TODO: Afficher le menu complet en itérant sur toutes les valeurs de CoffeeSize
// Hint: Utiliser 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érateurEntraînez-vous par vous-même : Compilateur Java en ligne