Java 26: новые ограничения и возможности под микроскопом

100
Java 26: новые ограничения и возможности под микроскопом

Команда разработчиков OpenJDK под руководством инженеров Oracle JDK собрала более 2700 исправлений и десять новых предложений (JEP), чтобы подготовить к выпуску Java 26. Их цель – повысить надёжность платформы без ущерба для производительности.

За последние годы Java последовательно уменьшала «серую» зону, где поведение могло зависеть от скрытых возможностей JVM. Последний крупный шаг – ограничить возможность менять поля, объявленные как final. До Java 26 такие изменения проходили тихо, а теперь они сопровождаются предупреждениями и требуют явного разрешения.

Технические детали

При попытке изменить final-поле через рефлексию JVM выводит сообщение вида:

WARNING: Final field ... has been mutated reflectively ...

Чтобы избавиться от предупреждения, необходимо добавить параметр --enable-final-field-mutation и перечислить модули, которым разрешено такое действие.
При этом можно уточнить реакцию JVM на нелегальное изменение с помощью --illegal-final-field-mutation, выбирая режимы allow, warn, debug или deny.
Последний режим бросает IllegalAccessException, а в будущих версиях станет значением по умолчанию.

Четвёртый preview (JEP 530) расширил использование примитивных типов в паттернах instanceof и switch. Появилось понятие «безусловно точного приведения, основанного на значениях», позволяющее компилятору отсеивать доминирующие ветки. Например, константу 42 в short теперь считается точно преобразуемой, и соответствующая ветка в switch будет помечена как доминирующая.

Новый API LazyConstant (JEP 526) заменил прежний StableValue. Интерфейс java.lang.LazyConstant предоставляет единственный метод get(), гарантируя, что поставщик (Supplier) выполнится лишь один раз.

Удалены избыточные методы, упрощён набор статических фабрик. Это позволяет избавиться от громоздких идиом двойной проверки блокировки и делает отложенную инициализацию потокобезопасной без лишних синхронизаций.

ФичаПоведение в JDK 25Изменения в JDK 26
Изменение final‑полейРазрешено без предупрежденийВыдаётся предупреждение; требуется --enable-final-field-mutation
Примитивные паттерны в switchПоддержка только int/short/byte/char с константамиПоддержка всех примитивов, новые правила доминирования
LazyConstant APIStableValue, множество методовПереименован в LazyConstant, упрощён набор методов

Как начать работать с Java 26

Для разработки достаточно скачать дистрибутив JDK 26 от Oracle или OpenJDK и включить preview‑режим флагом --enable-preview.
При работе с рефлексией добавьте --enable-final-field-mutation=ALL-UNNAMED или укажите конкретные модули.

Для ленивой инициализации замените старый шаблон на LazyConstant.of(() -> …) и вызывайте get() там, где нужен объект.

Java в дальнейшем

Следующий релиз, ожидаемый в сентябре 2026 года, продолжит ужесточать политику доступа к опасным операциям и доведёт поддержку примитивных паттернов до окончательного статуса.

Появятся новые JEP, направленные на улучшение производительности JIT‑компилятора и упрощение работы с модулями.

Последнее изменение:

0 Комментарии
Популярные
Новые Старые
Inline Feedbacks
Посмотреть все комментарии