Menu
Coddy logo textTech

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 : MONDAY

Les é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 : 20

Chaque é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 enum

Les é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.

challenge icon

Défi

Facile

Construisons 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, MEDIUM et LARGE, avec des prix respectifs de 2.50, 3.50 et 4.50.

    Chaque taille doit avoir un champ price privé (double), un constructeur pour lui attribuer une valeur et une méthode getPrice() pour la récupérer. Ajoutez également une méthode getDescription() 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) et size (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éthode values(). 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
        
    }
}
quiz iconTestez-vous

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

Entraînez-vous par vous-même : Compilateur Java en ligne