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

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

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

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

challenge icon

Défi

Facile

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

    Chaque taille nécessite un champ privé price (double), un constructeur pour le définir et une méthode getPrice() pour le récupérer. Ajoutez également une méthode getDescription() 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) et size (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éthode values(). 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 : MONDAY

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

Méthodes d'énumération intégrées :

  • values() - retourne un tableau de toutes les constantes de l'enum
  • valueOf(String) - convertit une chaîne de caractères en la constante enum correspondante
  • 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 enum

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 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
        
    }
}
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