junior
Какие ключевые нововведения появились в Java 17?
Java 17 — второй LTS после Java 11, ставший минимальной версией для Spring Boot 3.x и Spring Framework 6.x. В этом релизе финализированы Records, Sealed Classes, Pattern Matching и Text Blocks.
Нововведения по версиям (Java 12-17)
| Версия | Нововведение |
|---|---|
| Java 12 | Switch Expressions (preview) |
| Java 13 | Text Blocks (preview) |
| Java 14 | Records (preview), Pattern Matching для instanceof (preview), NullPointerException с подробностями |
| Java 15 | Text Blocks (final), Sealed Classes (preview), ZGC (production) |
| Java 16 | Records (final), Pattern Matching для instanceof (final), Stream.toList() |
| Java 17 | Sealed Classes (final), удалён Security Manager, новый macOS rendering pipeline |
Пример: Helpful NullPointerException и Stream.toList()
// Helpful NullPointerException (Java 14)
var user = getUser();
var street = user.getAddress().getStreet().toUpperCase();
// До Java 14: NullPointerException
// Java 14+: Cannot invoke "Address.getStreet()" because the return value of
// "User.getAddress()" is null
// Stream.toList() (Java 16) — unmodifiable list
List<String> names = users.stream()
.map(User::getName)
.toList(); // вместо .collect(Collectors.toList())
Частые ошибки
stream().toList()vsstream().collect(Collectors.toList())—toList()возвращает неизменяемый список; если нужен мутабельный —collect(Collectors.toList())- Не обновить зависимости при миграции на 17 — Lombok, Mockito, Byte Buddy, ASM требуют обновления
Как используется в 2026
- Java 17 — актуальная LTS, широко используется в продакшене
- Большинство enterprise-проектов на Java 17 или мигрируют на Java 21
- Новые проекты стартуют на Java 21 или 25
На собеседовании: главное — знать, что Java 17 обязательна для Spring Boot 3.x, и уметь перечислить ключевые финализированные фичи: Records, Sealed Classes, Pattern Matching для instanceof, Text Blocks. Частая ошибка — не знать разницу между
toList()иcollect(Collectors.toList()).