Перейти к основному содержимому

Функции предварительной версии Java

· 5 мин. чтения

1. Обзор

В этом руководстве мы собираемся изучить мотивацию функций предварительного просмотра Java, их отличие от экспериментальных функций и то, как включить их с помощью различных инструментов.

2. Почему функции предварительного просмотра

Как, наверное, уже всем ясно, выпуски функций Java выпускаются каждые шесть месяцев. Это означает меньшее время ожидания новых функций Java, но в то же время меньше времени на реакцию на отзывы о новых функциях.

Это Java, о которой мы говорим здесь. Он используется для разработки огромного количества производственных систем. В результате даже небольшой сбой в одной из реализаций или некачественный дизайн функций может обойтись очень дорого.

Должен быть способ обеспечить стабильность новых функций. Что еще более важно, они должны соответствовать потребностям общества. Но как?

Благодаря JEP-12 в поставки могут быть включены «язык обзора и функции виртуальной машины». Таким образом, сообщество может проверить новые функции в реальных сценариях — однако, конечно, не в производственной среде.

Основываясь на отзывах сообщества, функция предварительного просмотра может быть улучшена, возможно, несколько раз в нескольких выпусках. В конце концов, функция может стать постоянной. Но в некоторых случаях предоставленные обзоры могут привести к полной отмене функции предварительного просмотра.

3. Предварительные версии и экспериментальные функции

Предварительные версии Java — это полностью определенные и разработанные функции, проходящие оценку . Следовательно, они просто еще не достигли конечного состояния.

Из-за высокого качества различные реализации JDK должны включать все предварительные функции, запланированные в каждой поставке Java. Однако выпуск Java по-прежнему не может поддерживать функции предварительного просмотра из более ранних выпусков .

Функции предварительного просмотра — это, по сути, просто способ побудить сообщество просмотреть и оставить отзыв. Более того, не каждая функция Java должна пройти этап предварительного просмотра, чтобы стать окончательной.

Вот что JEP-12 говорит о функциях предварительного просмотра:

  > Предварительная  `версия языка или функция виртуальной машины`  — это новая функция, дизайн, спецификация и реализация которой завершены, но которая выиграет от периода широкой демонстрации и оценки, прежде чем она либо получит окончательный и постоянный статус на платформе Java SE, либо еще будет доработана или удаленный.

С другой стороны, экспериментальные функции далеки от завершения . Их артефакты четко отделены от артефактов JDK.

Экспериментальные функции нестабильны и, как таковые, создают риск для языка. Следовательно, разные реализации JDK могут включать разные наборы экспериментальных функций.

4. Использование функций предварительного просмотра

Функции предварительного просмотра по умолчанию отключены . Чтобы включить их, мы должны использовать аргумент enable-preview , который включает все функции предварительного просмотра одновременно.

Компилятор Java, а также JVM должны иметь ту же версию Java , которая включает функцию предварительного просмотра, которую мы хотим использовать.

Давайте попробуем скомпилировать и запустить фрагмент кода, использующий текстовые блоки, функцию предварительного просмотра в JDK 13:

String query = """
SELECT 'Hello World'
FROM DUAL;
""";
System.out.println(query);

Конечно, нам нужно убедиться, что мы используем JDK 13 с нашей любимой IDE. Мы можем, например, загрузить выпуск OpenJDK 13 и добавить его в среду выполнения Java нашей IDE.

4.1. С затмением

Сначала Eclipse пометит код красным, так как он не будет компилироваться. В сообщении об ошибке нам будет предложено включить функции предварительного просмотра, чтобы использовать текстовые блоки.

Нам нужно щелкнуть правой кнопкой мыши по проекту и выбрать « Свойства » во всплывающем меню. Далее переходим к компилятору Java . Теперь мы можем включить функции предварительного просмотра либо для этого конкретного проекта, либо для всей рабочей области.

Далее мы должны снять флажок Использовать настройки соответствия по умолчанию , и только после этого мы можем отметить Включить функции предварительного просмотра для Java 13 :

./922995955f86d292aab774d2d74c61f7.png

4.2. С IntelliJ IDEA

Как и следовало ожидать, код по умолчанию также не будет компилироваться в IntelliJ, даже с Java 13, и мы получим сообщение об ошибке, похожее на то, что мы видели в Eclipse.

Мы можем включить функции предварительного просмотра из структуры проекта в меню « Файл» . В Project нам нужно выбрать 13 (Preview) в качестве уровня языка проекта:

./a72ad92de9d51dd20bdb89a9094c16e6.png

Это должно сделать это. Однако, если ошибка все еще сохраняется, мы должны вручную добавить аргументы компилятора, чтобы включить функции предварительного просмотра. Предполагая, что это проект Maven, плагин компилятора в pom.xml должен содержать:

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>13</source>
<target>13</target>
<compilerArgs>
--enable-preview
</compilerArgs>
</configuration>
</plugin>
</plugins>
</build>

При необходимости мы можем аналогичным образом включить функции предварительного просмотра для других плагинов Maven в соответствующих конфигурациях.

4.3. Из командной строки

Во время компиляции команде javac нужны два аргумента — enable-preview и release : ``

javac --release 13 --enable-preview ClassUsingTextBlocks.java

Напомним, что выпуск JDK N не поддерживает функции предварительного просмотра выпуска N-1 или любых предыдущих выпусков. Поэтому мы получим ошибку, если попытаемся выполнить предыдущую команду с помощью JDK 14 .

Короче говоря, аргумент выпуска должен установить N в версию выпуска JDK компилятора (и JVM), используемого для включения функций предварительного просмотра.

Аргумент выпуска — это просто дополнительная защита, гарантирующая, что код, использующий функции предварительного просмотра, не будет активно использоваться в рабочей среде.

Во время выполнения команде java требуется только аргумент enable-preview :

java --enable-preview ClassUsingTextBlocks

Однако будет работать только код, использующий функции предварительного просмотра этого конкретного выпуска JDK.

5. Вывод

В этой статье мы представили функции предварительного просмотра в Java, почему они у нас есть и чем они отличаются от экспериментальных функций.

Затем, используя функцию предварительного просмотра текстовых блоков в JDK 13, мы шаг за шагом объяснили, как использовать функции предварительного просмотра из Eclipse, IntelliJ, Maven и командной строки.