Ошибка компиляции в определенном шаблоне синтаксиса переключателя java

Неизвестная синтаксическая ошибка возникает из-за знака Logical not при написании оператора switch-yield в Java. После выхода, как показано ниже '!' вызовет ошибку компиляции.

final var error = switch(args[0]) {
    case "A" -> {
        yield !true || true;
    }
    default -> false;
};

Распечатанное сообщение об ошибке компиляции:

error: not a statement
                yield !true || true;
                ^

Следующее '!' После написания кода он успешно компилируется.

final var success = switch(args[0]) {
    case "A" -> {
        yield true || !true;
    }
    default -> false;
};

смешно: yield (!true) || true; работает

Iłya Bursov 28.11.2022 05:41

Оба кода работают в моей среде (JDK19).

モキャデ 28.11.2022 05:55

Java 16 выдает ошибку not a statement

Iłya Bursov 28.11.2022 05:56

Возникает при тестировании на версии JDK 15. Это была ошибка, и, похоже, она была исправлена, так как тестирование с JDK 17 и выше не приводило к ошибкам компиляции.

boozilla 28.11.2022 06:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
4
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это ошибка JDK.

См. [JDK-8268670] операторы yield не допускают использования ~ или ! Унарные операторы в выражении - Система ошибок Java

Кажется, это решено в версии 17.

Пробовал и без ошибок в openjdk 17.0.2

samabcde 28.11.2022 06:23

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

C# Случай переключения не продолжается после попытки поймать - нужен цикл для ввода действительного типа данных
В C возможно ли иметь макрос с оператором условного разрыва
Оператор Switch в лямбда-выражении
Как выбрать определенный пользовательский ввод из HTML для использования в Javascript
Неточные ответы на программу-калькулятор на C
Почему моя программа не печатает код, который идет после регистра переключателей? Он заканчивается после того, как выполнен случай переключения, и это все
Могу ли я использовать оператор «переключатель» в любом из приведенных ниже вопросов? или «иначе, если» правильный путь?
Как вернуть значение из оператора if let внутри функции?
Почему нельзя использовать используемую переменную в разделе переключателя без фигурных скобок в С#?
Как я могу преобразовать связанный оператор if, проверяющий несколько значений, в оператор case в bash?