tgoop.com/BookJava/3950
Create:
Last Update:
Last Update:
Pattern Matching в switch
.
Pattern Matching в switch
— убийца if-else
цепочек ⚔️
Ты наверняка видел такие простыни:
if (obj instanceof String) {
System.out.println("Строка длиной " + ((String) obj).length());
} else if (obj instanceof Integer) {
System.out.println("Целое число " + obj);
} else if (obj instanceof List) {
System.out.println("Список размером " + ((List<?>) obj).size());
} else {
System.out.println("Неизвестный тип");
}
Знакомо? 😅
Тут и дублирование, и касты, и вечная путаница.
Что пришло с Java 17+ 🌟
Теперь можно использовать Pattern Matching прямо в
switch
:
switch (obj) {
case String s -> System.out.println("Строка длиной " + s.length());
case Integer i -> System.out.println("Целое число " + i);
case List<?> l -> System.out.println("Список размером " + l.size());
default -> System.out.println("Неизвестный тип");
}
Красота:
✅ Нет ручных кастов
✅ Нет
else if
простыней✅ Всё читается как декларативное описание
А если хочется добавить условия? 🤔
Можно так:
switch (obj) {
case String s when s.length() > 5 ->
System.out.println("Длинная строка");
case String s ->
System.out.println("Короткая строка");
default ->
System.out.println("Что-то другое");
}
Тут
when
— это guard condition.Оно проверяется после совпадения типа, и только тогда срабатывает ветка.
Сравним 🥊
До Java 17: каша из
if-else
, ручные касты.После Java 17: один чистый
switch
, никакой боли.Итог 💡
- Используй
switch
с pattern matching, когда у тебя много разных подтипов или вход может быть разным типом.- Код становится декларативным и компактным.
- А главное — исчезают дубли и лишние касты.
👉 @BookJava
BY Библиотека Java разработчика
Share with your friend now:
tgoop.com/BookJava/3950