Language Средний

Добавлять условия к ветвям паттернов с помощью охранников when.

✕ Java 8
if (shape instanceof Circle) {
    Circle c = (Circle) shape;
    if (c.radius() > 10) {
        return "large circle";
    } else {
        return "small circle";
    }
} else {
    return "not a circle";
}
✓ Java 21+
return switch (shape) {
    case Circle c
        when c.radius() > 10
            -> "large circle";
    case Circle c
            -> "small circle";
    default -> "not a circle";
};
Заметили проблему в этом коде? Сообщите нам.
🎯

Точное совпадение

Объединить тип и условие в одной метке case.

📐

Плоская структура

Никаких вложенных if/else внутри ветвей switch.

📖

Читаемое намерение

Клауза when читается как естественный язык.

Старый подход
Вложенный if
Современный подход
Клауза when
Начиная с JDK
21
Сложность
Средний
Охраняемые паттерны с when
Доступно

Доступно в JDK 21 LTS (сент. 2023)

Охраняемые паттерны позволяют уточнить совпадение по типу дополнительным булевым условием. Благодаря этому вся логика ветвления остаётся в switch, а не вложена в ветви в виде if-операторов.