JDK 22 не относится к выпуску Long Term Support, а является одним из обычных релизов, которые планируется выпускать каждые полгода. Тем не менее, ему есть чем похвастаться.
В этом выпуске есть все: он состоит из JEP в финальном, предварительном и инкубаторном состоянии. В качестве справки, JEP означает JDK Enhancement Proposal. Это предложения по добавлению новых основных функций в JDK. Создание спецификации на основе первоначального предложения - это итеративный процесс, который также включает в себя запросы на комментарии.
Предлагаемая функция может касаться добавления чего-то нового в язык, например записей или выражений Switch, или в любой из API-интерфейсов Java. Изучение JEP может дать ответы на многие вопросы, например, выяснить, когда была введена определенная функция, или посмотреть, куда все движется в будущем. В этом выпуске речь идет о таких JEP, как:
423: Region Pinning для G1
447: Утверждения перед super(. . . ) (Предварительный просмотр)
454: Foreign Function & Memory API
456: Неименованные переменные и шаблоны
457: API для работы с файлами классов (предварительный просмотр)
458: Запуск многофайловых программ с исходным кодом
459: Шаблоны строк (второй предварительный просмотр)
460: Векторный API (седьмой инкубатор)
461: Сборщики потоков (предварительный просмотр)
462: Структурированный параллелизм (второе превью)
463: Неявно объявленные классы и основные методы экземпляров (второе превью)
464: Скопированные значения (второй просмотр)
Все они замечательные, но давайте рассмотрим самые привлекательные.
454: Foreign Function & Memory API
Этот JEP предлагает новый способ доступа к родным библиотекам, написанным на таких языках, как C и C++. С помощью этого API Java-программы могут вызывать родные библиотеки и обрабатывать родные данные без хрупкости и опасностей JNI.
447: Утверждения перед super()
Функция в предварительном просмотре, которая позволяет операторам, не ссылающимся на создаваемый экземпляр, появляться перед явным вызовом конструктора.
Это полезно, когда нам нужно проверить аргумент, передаваемый конструктору суперкласса, позволяя включить логику проверки непосредственно в конструктор:

что приводит к созданию более гибкого и читабельного кода.
Еще одна функция в предварительной версии - 457: Class-File API, цель которой - предоставить стандартный API для работы с файлами классов Java.
Хорошо известно, что в экосистеме Java существует множество библиотек для разбора и генерации файлов классов, каждая из которых имеет свои цели, достоинства и недостатки. Этот API - попытка устранить эту фрагментацию, предоставив единый способ работы с такими файлами.
459: Шаблоны строк
Если вы когда-нибудь пытались написать многострочный запрос SQL внутри Java-кода с помощью оператора +, то вы знаете, что это такое.
Эта проблема была решена еще в Java 14 с появлением текстовых блоков. Дополнительным преимуществом строковых шаблонов является то, что теперь в них можно включать строковые литералы и значения переменных, значения которых будут подставляться во время выполнения, но при этом они менее подвержены возникновению уязвимостей безопасности. Например:
String weather = "Sunny";
System.out.println(STR."The weather will be {weather} tomorrow.");
И, наконец, JEP 461: сборщики потоков
Использование потоков в экосистеме Java уже стало повсеместным и идеально подходит для многих задач, но фиксированный набор промежуточных операций означает, что некоторые сложные задачи не могут быть легко выражены в виде конвейеров потоков. Либо нужной промежуточной операции не существует, либо она существует, но не поддерживает задачу напрямую.
Stream::gather(Gatherer) - это новая промежуточная операция потока, которая обрабатывает элементы потока, применяя определенную пользователем сущность, называемую сборщиком. С помощью операции gather мы можем создавать эффективные, готовые к параллельной работе потоки, реализующие практически любую промежуточную операцию. Stream::gather(Gatherer) является для промежуточных операций тем же, чем Stream::collect(Collector) является для терминальных операций. Например, сборщик может преобразовывать один входной элемент в один выходной элемент до тех пор, пока не станет истинным некоторое условие, после чего он начнет преобразовывать один входной элемент в два выходных элемента.
Это лишь обзор нового релиза с высоты птичьего полета. Если вы хотите углубиться до уровня API, вам следует обратиться к Javaalmanac, где перечислены все низкоуровневые модификации и дополнения API между версиями JDK.
В общем, Java продолжает развиваться, и эта версия предлагает еще несколько причин, чтобы перейти на нее, если вы еще этого не сделали.
Понравилась новость? Тогда не забудь оставить свой комментарий.
А так же, добавь наш сайт в закладки (нажми Ctrl+D), не теряй нас.
Комментарии