0Pricing
Java Academy · Leçon

Expressions switch avec des énumérations

Utilisez les expressions switch modernes avec des énumérations pour créer des branchements clairs et exhaustifs.

Expressions switch avec des énumérations est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.

Expressions de sélection avec des énumérations

Les expressions de sélection (Java 14+) avec des énumérations fournissent un routage exhaustif et concis fondé sur le type. Lorsque toutes les constantes de l'énumération sont couvertes, aucun default n'est nécessaire.

Instruction de sélection traditionnelle

L'instruction de sélection classique fonctionne avec les énumérations, mais nécessite break pour empêcher la poursuite automatique vers le cas suivant.

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action;
switch (s) {
    case LOW:
        action = "Log and monitor";
        break;
    case MEDIUM:
        action = "Notify on-call team";
        break;
    case HIGH:
        action = "Page engineer immediately";
        break;
    case CRITICAL:
        action = "Activate incident response";
        break;
    default:
        action = "Unknown";
}
System.out.println(action); // Page engineer immediately

Expression de sélection avec étiquettes fléchées

Les expressions de sélection avec des étiquettes fléchées éliminent la poursuite automatique et break. Elles produisent une valeur et doivent couvrir tous les cas.

enum Severity { LOW, MEDIUM, HIGH, CRITICAL }

Severity s = Severity.HIGH;
String action = switch (s) {
    case LOW      -> "Log and monitor";
    case MEDIUM   -> "Notify on-call team";
    case HIGH     -> "Page engineer immediately";
    case CRITICAL -> "Activate incident response";
    // no default needed — all cases covered
};
System.out.println(action); // Page engineer immediately

Expression de sélection avec blocs

Lorsque la logique d'un cas nécessite plusieurs instructions, utilisez un bloc avec yield pour produire la valeur du résultat.

enum DayOfWeek { MON, TUE, WED, THU, FRI, SAT, SUN }

DayOfWeek day = DayOfWeek.FRI;
int hoursOpen = switch (day) {
    case MON, TUE, WED, THU -> 8;
    case FRI -> {
        System.out.println("Half day on Friday!");
        yield 4;  // yield returns value from block
    }
    case SAT, SUN -> 0;
};
System.out.println("Hours open: " + hoursOpen); // Hours open: 4

Regroupement de plusieurs cas

Plusieurs constantes d’énumération peuvent partager le même cas en les séparant par des virgules.

enum Season { SPRING, SUMMER, FALL, WINTER }

Season season = Season.SUMMER;
String activity = switch (season) {
    case SPRING, FALL -> "Hike in the mountains";
    case SUMMER       -> "Beach vacation";
    case WINTER       -> "Ski at the resort";
};
System.out.println(activity); // Beach vacation

Retour depuis des méthodes avec des expressions de sélection

Les expressions de sélection s’utilisent très bien comme instructions de retour dans les méthodes, ce qui rend l’intention claire.

enum Priority { LOW, NORMAL, HIGH, URGENT }

static int getSlaHours(Priority p) {
    return switch (p) {
        case LOW    -> 72;
        case NORMAL -> 24;
        case HIGH   -> 4;
        case URGENT -> 1;
    };
}

System.out.println(getSlaHours(Priority.URGENT)); // 1
System.out.println(getSlaHours(Priority.LOW));    // 72

Expression de sélection dans un flux

Les expressions de sélection peuvent être utilisées à l’intérieur d’opérations sur les flux pour effectuer proprement des transformations élément par élément.

import java.util.*;
import java.util.stream.*;

enum Status { PENDING, ACTIVE, CLOSED }

record Account(String id, Status status) {}

List<Account> accounts = List.of(
    new Account("A1", Status.ACTIVE),
    new Account("A2", Status.PENDING),
    new Account("A3", Status.CLOSED)
);

accounts.stream()
    .map(a -> a.id() + ": " + switch (a.status()) {
        case ACTIVE  -> "\u2705 Live";
        case PENDING -> "\u23f3 Awaiting activation";
        case CLOSED  -> "\u274c Deactivated";
    })
    .forEach(System.out::println);

Exhaustivité à la compilation

Le compilateur vérifie que toutes les constantes d’énumération sont prises en compte. L’ajout d’une nouvelle constante à une énumération provoque des erreurs de compilation dans toutes les expressions de sélection qui ne la traitent pas.

enum Color { RED, GREEN, BLUE }  // add YELLOW here → compile error below

Color c = Color.GREEN;
// This switch is exhaustive for RED, GREEN, BLUE
// If you add YELLOW to the enum without adding a case here,
// the compiler will report an error.
String hex = switch (c) {
    case RED   -> "#FF0000";
    case GREEN -> "#00FF00";
    case BLUE  -> "#0000FF";
};
System.out.println(hex); // #00FF00

Expression de sélection avec un cas par défaut pour plus de sécurité

Lorsque vous utilisez une instruction de sélection et non une expression, ou lorsque la sélection ne couvre intentionnellement que certains cas, ajoutez un cas par défaut.

enum Feature { DARK_MODE, PUSH_NOTIFICATIONS, ANALYTICS, BETA_FEATURE }

static boolean isEnabled(Feature feature) {
    return switch (feature) {
        case DARK_MODE, PUSH_NOTIFICATIONS -> true;
        case ANALYTICS                     -> false;
        default -> {
            System.out.println("Unknown feature: " + feature);
            yield false;
        }
    };
}
System.out.println(isEnabled(Feature.DARK_MODE));     // true
System.out.println(isEnabled(Feature.BETA_FEATURE));  // false

En pratique : cycle de vie d’une commande

Une machine à états complète pour le cycle de vie d’une commande, utilisant une expression de sélection pour déterminer les transitions autorisées.

enum OrderState { CART, PENDING, CONFIRMED, SHIPPED, DELIVERED, CANCELLED }

static Set<OrderState> allowedTransitions(OrderState from) {
    return switch (from) {
        case CART      -> Set.of(OrderState.PENDING, OrderState.CANCELLED);
        case PENDING   -> Set.of(OrderState.CONFIRMED, OrderState.CANCELLED);
        case CONFIRMED -> Set.of(OrderState.SHIPPED);
        case SHIPPED   -> Set.of(OrderState.DELIVERED);
        case DELIVERED, CANCELLED -> Set.of(); // terminal states
    };
}
System.out.println(allowedTransitions(OrderState.PENDING));
// [CONFIRMED, CANCELLED]

Sélection selon une chaîne ou une énumération

Une sélection selon String nécessite une vérification de nullité et respecte la casse. Une sélection selon une énumération est sûre du point de vue du typage, mais provoque une NPE si la valeur est nulle — préférez les énumérations lorsque l’ensemble des valeurs est connu.

// String switch — fragile
String role = "admin";
String label = switch (role.toLowerCase()) {
    case "admin" -> "Administrator";
    case "guest" -> "Guest User";
    default      -> "Unknown";
};

// Enum switch — type-safe
enum Role { ADMIN, GUEST }
Role r = Role.ADMIN;
String label2 = switch (r) {
    case ADMIN -> "Administrator";
    case GUEST -> "Guest User";
};
System.out.println(label2); // Administrator

Vérification rapide

Vous avez une énumération comportant 4 constantes et écrivez une expression de sélection couvrant les 4. Que se passe-t-il si vous ajoutez une 5e constante à l’énumération ?

Récapitulatif : expressions de sélection avec des énumérations

À retenir :

  • Les expressions de sélection à étiquettes fléchées éliminent les interruptions et le passage implicite au cas suivant
  • Utilisez le renvoi de valeur pour renvoyer une valeur depuis un cas sous forme de bloc
  • Regroupez plusieurs constantes avec des virgules : case A, B ->
  • Les expressions de sélection exhaustives n’ont pas besoin de cas par défaut lorsque toutes les constantes sont couvertes
  • L’ajout d’une nouvelle constante d’énumération provoque des erreurs de compilation dans les expressions de sélection exhaustives
  • Les expressions de sélection sont particulièrement adaptées aux opérations map() sur les flux

Questions Fréquemment Posées

La leçon « Expressions switch avec des énumérations » est-elle gratuite ?

Oui — le texte complet de « Expressions switch avec des énumérations » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Expressions switch avec des énumérations » ?

Utilisez les expressions switch modernes avec des énumérations pour créer des branchements clairs et exhaustifs. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer Java Academy ?

Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Expressions switch avec des énumérations » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?

Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Définir et utiliser des énumérations
  2. Énumérations avec champs et méthodes
  3. Expressions switch avec des énumérations
  4. EnumSet et EnumMap
← Retour à Java Academy