Сегодня мы рассмотрим тему того, что принесет следующий LTS релиз JDK 21.
Первая информация о JDK 21
Пока мы все с нетерпением ждем скорого выхода JDK 20, список функций, которые появятся в JDK 21 этой осенью, также постепенно уточняется.
Начнем с JEP, которые уже были официально предложены в рамках осеннего релиза. Итак, все указывает на то, что мы получим. Их цель — стать расширением текстовых блоков, представленных в JDK 15. Шаблоны строк упрощают их заполнение (а также обычных строк) динамическими значениями.
Чтобы лучше представить это, посмотрим на один пример из JEP:
String name = "Joan Smith"; String phone = "555-123-4567"; String address = "1 Maple Drive, Anytown"; String json = STR.""" { "name": "\{name}", "phone": "\{phone}", "address": "\{address}" } """;
Также возможно передавать и целые выражения:
int x = 10; int y = 20; String s = STR."\{x} + \{y} = \{x + y}"; // 10 + 20 = 30
Все это дело основано на так называемых процессорах, в приведенных выше примерах использовался STR., который просто выполняют интерполяцию.
В самом JDK также появился процессор FMT., который позволяет выполнять дополнительное форматирование, например, определять десятичную точность float. Пользователь также сможет определить пользовательские процессоры. Получившийся механизм выглядит очень гибким и выходит далеко за рамки простого заполнения строк переменными.
Еще одним уже анонсированным дополнением является JEP 431: Sequenced Collections. До сих пор в JDK не было интерфейса, который мог бы определять коллекции с элементами в четко определенном порядке, обеспечивая при этом удобную итерацию вперед и назад по элементам. По этой причине, в основном, каждая существующая коллекция подходила к этой теме по-разному:

Поэтому в JDK придет появится интерфейс, основанный на реализации Deque:
interface SequencedCollection<E> extends Collection<E> { SequencedCollection<E> reversed(); void addFirst(E); void addLast(E); E getFirst(); E getLast(); E removeFirst(); E removeLast(); }
В дополнение к улучшенной поддержке операций над первым и последним элементами, также благодаря внедрению метода reversed() станет проще выполнять итерации по коллекции в обратном порядке.
Однако это еще не все — все указывает на то, что мы также получим еще два JEP в JDK 21 — Record Patterns и Pattern Matching for Switch.
Как отмечается на Reddit /r/java, хотя оба JEP все еще остаются в Draft, примеры кода в них явно относятся именно к JDK 21. Так что, похоже, «осень будет принадлежать» Project Amber.
И раз уж мы затронули тему Pattern Matching и деконструкции записей (record deconstruction), разработчики JDK не планируют останавливаться на достигнутом. На прошлой неделе Брайан Гетц опубликовал анализ паттернов деконструкции о возможности реализации деконструкции объектов, отличных от записей.
В этом документе предлагается ввести деконструкторы, которые являются обобщением решений, созданных для записей.
Они должны позволять выполнение деструктукции любого класса, в котором они объявлены. Деконструкторы должны быть определены явно и требуют точного соответствия.
Приведенный ниже пример показывает, как они могут выглядеть, хотя Брайан Гетц предупреждает, что все последующее предназначено только для иллюстрации и не должно считаться окончательным или каким-либо еще.
class Point { final double x, y; public Point(double x, double y) { this.x = x; this.y = y; } public matcher Point(double x, double y) { x = this.x; y = this.y; } }
Таким образом, они должны быть чем-то вроде обратных конструкторов, потому что они должны собирать значения полей данного объекта и представлять их как легко извлекаемые из класса.
Просто для протокола (хех) также стоит упомянуть, что JDK 21 будет LTS релизом (Long-Time Support — релизом с длительной поддержкой).
Так что будем надеяться, что он будет максимально насыщен функционально, потому что это будет JDK, рекомендованный для производственного использования на долгие годы.
сточники
ссылка на оригинал статьи https://habr.com/ru/post/721710/
Добавить комментарий