Состоялся релиз Java 17 с расширеной поддержкой (LTS). Предыдущая версия с расширеной поддержкой, Java 11, вышла в 2018 году.
Наиболее примечательным изменением в данной версии является то, что поддержка «запечатаных» (sealed) классов и интерфейсов вышла из стадии предварительного просмотра и признана готовой к использованию.
Запечатанные (sealed) типы — это классы или интерфейсы, накладывающие ограничения на другие классы или интерфейсы, которые могут расширять или реализовывать их. Для объявления запечатанного класса или интерфейса используется модификатор sealed
. Список подтипов может быть перечислен при объявлении запечатанного класса или интерфейса после ключевого слова permits
. В случае если подтипы находятся в том же пакете или модуле, компилятор сам может вывести список подтипов и permits
в объявлении запечатанного класса или интерфейса можно опустить.
sealed interface Color permits BiColor, TriColor { }
record BiColor(int r, int g, int b) implements Color {}
record TriColor(int r, int g, int b) implements Color {}
Реализованы спецификации:
-
JEP 306: Restore Always-Strict Floating-Point Semantics
Операции с плавающей запятой теперь будут постоянно строгими, вместо того чтобы иметь как строгую семантику с плавающей запятой (strictfp), так и слегка отличающуюся семантику с плавающей запятой по умолчанию. -
JEP 356: Enhanced Pseudo-Random Number Generators
Создан новый интерфейсRandomGenerator
и реализации для генераторов псевдослучайных чисел (PRNG):SplittableRandomGenerator
,JumpableRandomGenerator
,LeapableRandomGenerator
,ArbitrarilyJumpableRandomGenerator
. -
JEP 382: New macOS Rendering Pipeline
Добавлен новый конвейер рендеринга для macOS, использующий API Metal, в качестве альтернативы существующему конвейеру, использующему устаревший API OpenGL. -
JEP 391: macOS/AArch64 Port
Реализовано выполнение Java-кода на базе инструкций AArch64 без использования Rosetta 2. -
JEP 398: Deprecate the Applet API for Removal
Applet API помечен на удаление и будет удалён в последующих релизах. -
JEP 403: Strongly Encapsulate JDK Internals
Полностью убрана возможность ослабить строгую инкапсуляцию внутренних частей JVM; параметр--illegal-access
, позволявший это сделать в предыдущих версиях, удалён. -
JEP 406: Pattern Matching for switch (Preview)
Реализован редварительный просмотр Pattern Matching для конструкцииswitch
. -
JEP 407: Remove RMI Activation
Механизм активации RMI удалён. -
JEP 409: Sealed Classes
Запечатанные классы или интерфейсы ограничивают доступ к их расширению или реализации посредством явного указания классов/интерфейсов которым это разрешено. -
JEP 410: Remove the Experimental AOT and JIT Compiler
Удалена экспериментальная поддержка АОТ-компилятора. -
JEP 411: Deprecate the Security Manager for Removal
Security Manager помечен как устаревший и будет удалён в последующих версиях вместе с Applet API. -
JEP 412: Foreign Function & Memory API (Incubator)
Улучшены два ранее созданных API: Foreign-Memory Access API и Foreign Linker API. -
JEP 414: Vector API (Second Incubator)
Вторая версия для предварительного просмотра, где была улучшена производительность и реализация Vector API, включая улучшения преобразования байтовых векторов в логические массивы из них. -
JEP 415: Context-Specific Deserialization Filters
Добавлена настраиваемая фабрика фильтров для всей JVM. Эти фильтры являются динамическими и зависят от контекста, в отличие от единственного статического фильтра десериализации для всей JVM. Для обратной совместимости, если фабрика фильтров не задана, встроенная фабрика возвращает статический фильтр для всей JVM, если он был настроен.
>>> Подробности