Охраняемые паттерны с when
Добавлять условия к ветвям паттернов с помощью охранников 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
Сложность
Средний
Поддержка JDK
Охраняемые паттерны с when
Доступно
Доступно в JDK 21 LTS (сент. 2023)
Как это работает
Охраняемые паттерны позволяют уточнить совпадение по типу дополнительным булевым условием. Благодаря этому вся логика ветвления остаётся в switch, а не вложена в ветви в виде if-операторов.
Связанная документация
Доказательство