Какие новые возможности появились в Java 17 по сравнению с Java 11?
JavaJava 17java developerнововведениясравнение версий
Что проверяют
Следите ли вы за языком и понимаете ли, что дают новые конструкции, а не просто помните список.
Как отвечать
Главные вещи между 11 и 17:
- records (16): неизменяемый носитель данных, генерируются конструктор, геттеры,
equals,hashCode,toString. Убирают горы шаблонного кода в DTO; - sealed классы (17): фиксированный набор наследников, объявленный явно. В связке с сопоставлением образцов даёт исчерпывающую проверку компилятором;
- switch-выражение (14): возвращает значение, стрелочный синтаксис, без проваливания. Плюс
yieldдля блоков; - сопоставление образцов для
instanceof(16):if (o instanceof String s)без ручного приведения; - текстовые блоки (15): многострочные литералы в тройных кавычках, конец мучениям с SQL и JSON в коде;
varбыл уже в 10, но в связке с остальным заметно меняет стиль;- NullPointerException с подробным сообщением (14): указывает, какое именно обращение было пустым. Экономит часы;
- новые сборщики: ZGC и Shenandoah стали стабильными, G1 улучшен;
- новые методы API:
Stream.toList,Optional.stream,String.isBlank,strip,repeat,formatted.
Полезно добавить контекст версий: 11 и 17 это LTS, между ними шли обычные релизы каждые полгода, и большинство перечисленного пришло именно оттуда. Следующая LTS это 21 с виртуальными потоками и сопоставлением образцов в switch.
Где спотыкаются
Перечисляют возможности, но не могут объяснить, какую задачу они решают.
Считают record просто сокращением, не упоминая неизменяемость.
Не знают, зачем нужны запечатанные классы, кроме «ограничить наследование».
Путают, что появилось в 17, а что уже в 21.