Pattern Matching в switch
Заменить цепочки if-else-instanceof чистыми паттернами типов в switch.
Сравнение кода
✕ Java 8
String format(Object obj) {
if (obj instanceof Integer i)
return "int: " + i;
else if (obj instanceof Double d)
return "double: " + d;
else if (obj instanceof String s)
return "str: " + s;
return "unknown";
}
✓ Java 21+
String format(Object obj) {
return switch (obj) {
case Integer i -> "int: " + i;
case Double d -> "double: " + d;
case String s -> "str: " + s;
default -> "unknown";
};
}
Заметили проблему в этом коде? Сообщите нам.
Почему современный подход лучше
Структурированная диспетчеризация
Switch делает структуру ветвления явной и понятной.
Форма выражения
Возвращает значение напрямую — изменяемая переменная не нужна.
Проверка исчерпываемости
Компилятор обеспечивает обработку всех типов.
Старый подход
Цепочка if-else
Современный подход
Паттерны типов
Начиная с JDK
21
Сложность
Средний
Поддержка JDK
Pattern Matching в switch
Доступно
Доступно в JDK 21 LTS (сент. 2023)
Как это работает
Pattern matching в switch позволяет напрямую сопоставлять типы, объединяя проверку типа, приведение и привязку в лаконичной метке case. Компилятор проверяет полноту охвата.
Связанная документация
Доказательство