Java 12 привносит новый вариант использования оператора switch. В случаях, если нам нужно сделать присвоение какой-либо переменной в зависимости от нужного условия в case, мы можем использовать новый синтаксис.

Как мы писали на Java конструкции с оператором switch? Примерно так:

public class SwitchOperatorOld {
    public static void main(String[] args) {
        // Так было до Java 12
        Weekdays weekday = FRIDAY;

        String typeOfDay;
        switch (weekday) {
            case MONDAY:
            case TUESDAY:
            case WEDNESDAY:
            case THURSDAY:
            case FRIDAY:
                typeOfDay = "будний день";
                break;
            case SATURDAY:
            case SUNDAY:
                typeOfDay = "выходной день";
                break;
            default:
                throw new IllegalStateException("Неизвестный день недели!" + weekday);
        }

        System.out.println(weekday.getName() + " это " + typeOfDay);
    }
}
public enum Weekdays {
    MONDAY("Понедельник"),
    TUESDAY("Вторник"),
    WEDNESDAY("Среда"),
    THURSDAY("Четверг"),
    FRIDAY("Пятница"),
    SATURDAY("Субботу"),
    SUNDAY("Воскресенье");

    private final String name;

    Weekdays(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }
}

Как видите, множество значений в строках case существенно увеличивают общую высоту блока switch, снижая читаемость и повышая вероятность допустить ошибку при поддержке такого кода.

С новым синтаксическим сахаром в виде упрощённого оператора switch мы теперь можем писать куда более простые и удобочитаемые конструкции:

public class SwitchOperatorNew {
    public static void main(String[] args) {
        // Нововведение в Java 12
        Weekdays weekday = FRIDAY;

        String typeOfDay = switch (weekday) {
            case MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY -> "будний день";
            case SATURDAY, SUNDAY -> "выходной день";
            default -> throw new IllegalStateException("Неизвестный день недели!" + weekday);
        };

        System.out.println(weekday.getName() + " это " + typeOfDay);
    }
}

Заметьте, что теперь мы маппим одно или несколько сравниваемых значений сразу на возвращаемое значение, упраздняя использование оператора break. А это, в свою очередь, снижает вероятность допустить ошибку.

Также мы можем использовать сразу несколько сравниваемых значений в блоке case, что повышает читаемость кода. Ведь мы может использовать несколько значение в одну строку и не раздувать тем самым код по высоте.

Теперь читать код стало приятнее

Новый синтаксис оператоа switch в Java 12 позволяет писать более краткий код. При этом читаемость нисколько не снижается, а наоборот улучшается.

Новый синтаксис оператора switch в Java 12