Как протестировать функции предварительного просмотра Java 23

Я хочу протестировать JEP 468 (Создание производной записи), но не могу его скомпилировать.

В JEP есть абзац:

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

Чтобы попробовать примеры в JDK 23, вам необходимо включить функции предварительного просмотра:

  • Скомпилируйте программу с помощью javac --release 23 --enable-preview Main.java и запустите ее с помощью java --enable-preview Main; или,

  • При использовании средства запуска исходного кода запустите программу с помощью java --enable-preview Main.java; или,

  • При использовании jshell запустите его с помощью jshell --enable-preview.


  • Итак, я установил jdk 23 (для windows > sha256: b18897bec6b1c6e0f639d95757eb0e3b0ec3d69720f6e4631874f2f9408075c5),

  • соответственно изменил мой PATH,

  • выполнил javac --version, который вернул «javac 23»

  • написал следующий класс, используя создание производной записи:

public class Main {

    record Point(int x, int y) {
        public Point {
            System.out.println("Point created at (" + x + ", " + y + ")");
        }
    }

    public static void main(String[] args) {
        var oldLoc = new Point(1, 2);
        Point nextLoc = oldLoc with {
            x = 0;
        };
        System.out.println("New point: " + nextLoc);
    }
}
  • выполнил команду javac --release 23 --enable-preview .\src\Main.java
  • и получил следующую ошибку компилятора:
.\src\Main.java:14: Fehler: ';' erwartet
        Point nextLoc = oldLoc with {
                              ^
.\src\Main.java:14: Fehler: Keine Anweisung
        Point nextLoc = oldLoc with {
                               ^
.\src\Main.java:14: Fehler: ';' erwartet
        Point nextLoc = oldLoc with {
                                   ^
3 Fehler

Как я могу заставить это скомпилироваться (и в конечном итоге запуститься)?

Этот JEP все еще находится в статусе кандидата, что означает, что он еще не принят - в списке функций JDK он не упоминается.

greg-449 15.08.2024 16:13

Если бы этот JEP должен был быть включен в Java 23, в его заголовке вместо «Статус-кандидат» было бы «Статус целевой» и «Выпуск 23». Я предполагаю, что либо кто-то с оптимизмом смотрел на его включение в Java 23, либо изначально он был нацелен на Java 23, но был отозван или возвращен в статус кандидата до того, как Java 23 была завершена.

Mark Rotteveel 15.08.2024 16:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Как отмечалось в комментариях выше, функция JEP 468: создание производных записей (предварительная версия) в настоящее время не включена в Java 23.

  • Статус JEP скорее candidate, чем Closed / Delivered.
  • JEP не указан как функция на странице проекта Java 23.

Итак, следите за Java 24.

Другие вопросы по теме