[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-java-11-25-pattern-matching-dlya-switch":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":16,"progress":17,"seo":18},412,"pattern-matching-dlya-switch",11,"java-11-25","Java 11–25","🆕","Pattern Matching для switch","Pattern Matching для switch (финализирован в Java 21) позволяет использовать type patterns, guarded patterns и null-обработку в switch. В сочетании с sealed types обеспечивает exhaustive check без default.\n\n\u003Cdetails>\u003Csummary>Пример: type patterns, guard clauses, null\u003C\u002Fsummary>\n\n```java\n\u002F\u002F Type patterns в switch\nstatic String format(Object obj) {\n    return switch (obj) {\n        case Integer i  -> \"int: \" + i;\n        case Long l     -> \"long: \" + l;\n        case Double d   -> \"double: \" + d;\n        case String s   -> \"string: \" + s;\n        case null       -> \"null\";       \u002F\u002F обработка null!\n        default         -> \"unknown: \" + obj;\n    };\n}\n\n\u002F\u002F Guarded patterns (when)\nstatic String classify(Shape shape) {\n    return switch (shape) {\n        case Circle c when c.radius() > 100 -> \"Большой круг\";\n        case Circle c                       -> \"Круг r=\" + c.radius();\n        case Rectangle r when r.width() == r.height() -> \"Квадрат\";\n        case Rectangle r                    -> \"Прямоугольник\";\n        case Triangle t                     -> \"Треугольник\";\n    };\n}\n\n\u002F\u002F Sealed types — exhaustive без default\nsealed interface Result\u003CT> permits Success, Failure {}\nrecord Success\u003CT>(T value) implements Result\u003CT> {}\nrecord Failure\u003CT>(String error) implements Result\u003CT> {}\n\nstatic \u003CT> String handle(Result\u003CT> result) {\n    return switch (result) {\n        case Success\u003CT> s -> \"OK: \" + s.value();\n        case Failure\u003CT> f -> \"Error: \" + f.error();\n        \u002F\u002F default не нужен — компилятор знает все подтипы\n    };\n}\n```\n\n\u003C\u002Fdetails>\n\n### Null-обработка в switch\n\n```java\n\u002F\u002F До Java 21: switch бросал NPE для null\n\u002F\u002F Java 21: можно обрабатывать null\nstatic String process(String s) {\n    return switch (s) {\n        case null          -> \"null value\";\n        case \"hello\"       -> \"greeting\";\n        case String str when str.length() > 10 -> \"long: \" + str;\n        case String str    -> \"other: \" + str;\n    };\n}\n```\n\n### Частые ошибки\n\n- Неправильный порядок patterns — `case String s` перед `case String s when s.length() > 10` делает guarded pattern недостижимым\n- Забыть `null` case — если `null` не обработан и нет `default`, NPE как раньше\n- `default` с sealed types — скрывает ошибки при добавлении нового подтипа\n\n### Как используется в 2026\n\n- Стандартная практика для обработки разных типов, состояний, событий\n- Sealed + Records + Pattern Matching = визитор без Visitor pattern\n- Активно используется в domain logic и event handling\n\n> **На собеседовании:** покажите пример с sealed types и exhaustive switch — это самый мощный use case. Обязательно упомяните `when` для guard clauses и возможность обработки null. Частая ошибка — неправильный порядок patterns (более специфичные должны быть выше).","","junior",[15],"java-modern",[],null,{"title":19,"description":20,"ogTitle":19,"ogDescription":21,"keywords":22,"schemaAnswer":23,"featuredSnippetReady":24},"Pattern Matching для instanceof — Gymterview","Pattern Matching для instanceof (финализирован в Java 16) устраняет необходимость явного приведения типа после проверки `instanceof` — переменная привязывается ","Pattern Matching для instanceof (финализирован в Java 16) устраняет необходимость явного приведения типа после проверки ",[15,13],"Pattern Matching для instanceof (финализирован в Java 16) устраняет необходимость явного приведения типа после проверки `instanceof` — переменная привязывается к типу прямо в условии.",true]