Java Pattern Matching
miniJUGВ Java появится паттерн-матчинг.
Паттерн-матчинг (сопоставление с образцом) является довольно популярной синтаксической конструкцией, которая есть практически во всех функциональных языках. За годы их существования эта конструкция уже настолько доказала свою пользу и необходимость, что начала проникать и в известные императивные языки. И теперь очередь дошла и до Java: паттерн-матчинг получил свой JEP и был включён в проект Amber, где ведётся исследование и разработка будущих языковых улучшений. Помимо паттерн-матчинга там также есть локальный вывод типов (var), data-классы, подчёркивания, улучшенные перечисления, перекрытия лямбда-параметров и т.д.
Смысл паттерн-матчинга заключается в объединении проверки типа и извлечения из структуры необходимых компонентов. Сейчас такое делается с помощью оператора instanceof и последующего приведения:
if (value instanceof Integer) {
int i = (Integer) value;
System.out.println(“int %d”, i);
}
Такая конструкция является довольно громоздкой и чреватой ошибками. Паттерн-матчинг решает эту проблему с помощью нового оператора matches:
if (value matches Integer i) {
System.out.println(“int %d”, i);
}
Кроме того, паттерн-матчинг можно будет сделать с помощью улучшенного оператора switch:
switch (value) {
case Integer i: System.out.println(“int %d”, i); break;
...
}
Также в будущем планируется развить идею паттерн-матчинга ещё больше и добавить матчинг с деструктуризацией, а также позволить оператору switch возвращать значение:

При всей своей привлекательности введение паттерн-матчинга порождает ряд вопросов, которые на данный момент ожидают ответа:
Перекрытие переменными паттерна других переменных
Некоторые из этих вопросов кажутся действительно сложными, и это вызывает некое опасение, что паттерн-матчинг в Java может быть отложен на неопределённое время или полностью отвергнут, как это произошло с Enhanced Enums. Однако мы будем надеяться, что этого не произойдёт, и разработчики языка смогут решить вышеописанные проблемы.
Подписаться на канал в Telegram