Gymterview
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.