TGViewer
Библиотека Java разработчика Библиотека Java разработчика @bookjava · 10.1K subscribers
Post #3950 1.24K
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
  • 👍 7
More from @bookjava
  1. Sep 30, 2026Три похожих слова в Java — final, finally, finalize — но смысл у них совершенно разный. Ра…
  2. Sep 27, 2026🧠 Ленивая инициализация через Supplier — элегантная альтернатива double-checked locking К…
  3. Sep 23, 2026Что такое механизм try-with-resources? Механизм try-with-resources в Java — это конструкци…
  4. Sep 21, 2026📌 picocli — это современная библиотека для создания CLI-приложений на Java. Она упрощает…
  5. Sep 18, 2026Double-brace инициализация в Java — это идиома, которая используется для инициализации кол…
  6. Sep 16, 2026🧠@Value vs @ConfigurationProperties — не выбирай наобум Оба способа хороши для конфигурац…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →