junior
Switch Expressions
Switch Expressions (финализированы в Java 14) превращают switch из statement в expression, возвращающее значение. Стрелочный синтаксис -> исключает fall-through, yield возвращает значение из блока.
Старый vs новый switch
| Свойство | Старый switch | Switch Expression |
|---|---|---|
| Тип | Statement | Expression (возвращает значение) |
| Fall-through | Да (нужен break) |
Нет |
| Несколько значений | Каскад case: |
case A, B -> |
| Возврат из блока | break |
yield |
| Exhaustiveness | Не проверяется | Проверяется для enum/sealed |
Пример
// Старый switch (statement, fall-through)
String result;
switch (day) {
case MONDAY:
case TUESDAY:
result = "Начало недели";
break;
case FRIDAY:
result = "Пятница!";
break;
default:
result = "Обычный день";
break;
}
// Новый switch (expression, no fall-through)
String result = switch (day) {
case MONDAY, TUESDAY -> "Начало недели";
case FRIDAY -> "Пятница!";
default -> "Обычный день";
};
// Блок с yield
int numLetters = switch (day) {
case MONDAY, FRIDAY, SUNDAY -> 6;
case TUESDAY -> 7;
default -> {
String s = day.toString();
yield s.length(); // yield вместо return
}
};
Частые ошибки
- Забыть
yieldв блоке —returnне работает в switch expression; используйтеyield - Смешивание
->и:— в одном switch нельзя комбинировать стрелочный и двоеточный стиль defaultдля sealed/enum — скрывает ошибки при добавлении нового варианта; компилятор не предупредит
Как используется в 2026
- Switch expression — стандартный стиль; старый
switchсbreak— legacy - Комбинируется с Pattern Matching (Java 21) для мощных деконструкций
- IDE автоматически предлагает рефакторинг старого
switchв expression
На собеседовании: ключевые моменты — отсутствие fall-through,
yieldвместоreturnв блоке, exhaustiveness check для enum/sealed. Частая ошибка — путатьyieldиreturn.