Добавить в корзинуПозвонить
Найти в Дзене
Java

🖥 Java 21: String Templates (JEP 430) — Интерполяция строк как в JavaScript, но со своим подходом

🖥 Java 21: String Templates (JEP 430) — Интерполяция строк как в JavaScript, но со своим подходом Java 21 представила новый способ работы со строками — *string templates*. Это функция-превью (preview), которую нужно включать явно (`--enable-preview`) и использовать с JDK 21 или 22. В Java 23 от неё отказались, чтобы переработать дизайн. Как это работает? - Используется шаблонный процессор, например STR. - Сразу после него идёт точка . и строка-шаблон с выражениями внутри \{...}: String name = "Duke"; String greeting = STR."My name is \{name}"; // -> "My name is Duke" Встроенные выражения могут быть любыми Java-выражениями: арифметика, методы, поля: int x = 10, y = 20; String result = STR."\{x} + \{y} = \{x + y}"; - Поддержка многострочных шаблонов Можно использовать текстовые блоки для JSON, SQL и других структур: String json = STR.""" { "user": "\{name}", "temp": \{tempC} } """; Технические детали Шаблоны создают объект StringTemplate (runtime представление), содержащий масс

🖥 Java 21: String Templates (JEP 430) — Интерполяция строк как в JavaScript, но со своим подходом

Java 21 представила новый способ работы со строками — *string templates*. Это функция-превью (preview), которую нужно включать явно (`--enable-preview`) и использовать с JDK 21 или 22. В Java 23 от неё отказались, чтобы переработать дизайн.

Как это работает?

- Используется шаблонный процессор, например STR.

- Сразу после него идёт точка . и строка-шаблон с выражениями внутри \{...}:

String name = "Duke";

String greeting = STR."My name is \{name}";

// -> "My name is Duke"

Встроенные выражения могут быть любыми Java-выражениями: арифметика, методы, поля:

int x = 10, y = 20;

String result = STR."\{x} + \{y} = \{x + y}";

- Поддержка многострочных шаблонов

Можно использовать текстовые блоки для JSON, SQL и других структур:

String json = STR."""

{

"user": "\{name}",

"temp": \{tempC}

}

""";

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

Шаблоны создают объект StringTemplate (runtime представление), содержащий массив литералов и значений выражений.

- Есть разные шаблонные процессоры:

- STR — стандартная интерполяция

- FMT — поддерживает форматирование и локаль

- RAW — необработанный шаблон, для кастомной обработки

Текущее состояние

- Java 21: функция доступна как preview (JEP 430)

- Java 22: вторая preview-итерация

- Java 23: удалена (даже как preview), дизайн требует доработки

Почему удалили?

- Жалобы на синтаксис — \{} вместо привычного ${}, processor.template вместо простого подхода

- Смешение capture (формирование шаблона) и processing нарушает удобство расширения

- Производительность можно обеспечить и без специального синтаксиса

- Дискуссия среди разработчиков: часть считает interpolation небезопасной/бесполезной, часть — нужной функцией качества жизни

Итог

Java 21 попыталась упростить работу со строками и структурными текстами с помощью string templates — но разработка приостановлена из-за критики синтаксиса и архитектуры. Пока функция нестабильна и требует пересмотра.

📌 Подробнее