Пока мы все с нетерпением ждем скорого выхода JDK 20, список функций, которые появятся в JDK 21 этой осенью, также постепенно уточняется. Начнем с JEP, которые уже были официально предложены в рамках осеннего релиза. Так, все указывает на то, что мы получим там предварительную версию шаблонов строк (String Templates). Их цель — стать расширением текстовых блоков, представленных в JDK 15. Шаблоны строк упрощают их заполнение (а также обычных строк) динамическими значениями. Чтобы лучше представить это, посмотрим на один пример из JEP: Также возможно передавать и целые выражения: Все это дело основано на так называемых процессорах, в приведенных выше примерах использовался STR., который просто выполняют интерполяцию.  В самом JDK также появился процессор FMT., который позволяет выполнять дополнительное форматирование, например, определять десятичную точность float. Пользователь также сможет определить пользовательские процессоры. Получившийся механизм выглядит очень гибким и выходит далеко за рамки простого заполнения строк переменными. Еще одним уже анонсированным дополнением является JEP 431: Sequenced Collections. До сих пор в JDK не было интерфейса, который мог бы определять коллекции с элементами в четко определенном порядке, обеспечивая при этом удобную итерацию вперед и назад по элементам. По этой причине, в основном, каждая существующая коллекция подходила к этой теме по-разному: Поэтому в JDK появится интерфейс, основанный на реализации Deque: В дополнение к улучшенной поддержке операций над первым и последним элементами, также благодаря внедрению метода reversed() станет проще выполнять итерации по коллекции в обратном порядке. Однако это еще не все — все указывает на то, что мы также получим еще два JEP в JDK 21 — Record Patterns и Pattern Matching for Switch.  Как отмечается на Reddit /r/java, хотя оба JEP все еще остаются в Draft, примеры кода в них явно относятся именно к JDK 21. Так что, похоже, «осень будет принадлежать» Project Amber. И раз уж мы затронули тему Pattern Matching и деконструкции записей (record deconstruction), разработчики JDK не планируют останавливаться на достигнутом. На прошлой неделе Брайан Гетц опубликовал анализ паттернов деконструкции о возможности реализации деконструкции объектов, отличных от записей.  В этом документе предлагается ввести деконструкторы, которые являются обобщением решений, созданных для записей.  Они должны позволять выполнение деструктукции любого класса, в котором они объявлены. Деконструкторы должны быть определены явно и требуют точного соответствия. Приведенный ниже пример показывает, как они могут выглядеть, хотя Брайан Гетц предупреждает, что все последующее предназначено только для иллюстрации и не должно считаться окончательным или каким-либо еще. Таким образом, они должны быть чем-то вроде обратных конструкторов, потому что они должны собирать значения полей данного объекта и представлять их как легко извлекаемые из класса. Просто для протокола (хех) также стоит упомянуть, что JDK 21 будет LTS релизом (Long-Time Support - релизом с длительной поддержкой).  Так что будем надеяться, что он будет максимально насыщен функционально, потому что это будет JDK, рекомендованный для производственного использования на долгие годы. JEP 430: String Templates (Preview) JEP Draft: Record Patterns JEP Draft: Pattern Matching for switch JEP 431: Sequenced Collections Deconstruction patterns