Сопоставление шаблонов Java 22 не работает с сопоставлением шаблонов записей. Проблема с компиляцией

Пытаюсь использовать функцию Java 22. Ниже приведен код, который компилируется.

    Employee emp= new Employee(2, 3);
    
    if (emp instanceof Employee(int x, __)) {
          System.out.println("Employee is a position, x = " + x);
    }

    Compilation exception is: Syntax error, insert "RecordStructurePattern" to complete RecordPattern

Даже если использовать приведенный выше код ниже, он работает

    Employee emp= new Employee(2, 3);
    
    if (emp instanceof Employee(int x, int __)) {
          System.out.println("Employee is a position, x = " + x);
    }

Здесь Сотрудник — это запись. Я использую Java 22.

Не могу понять, что здесь не так

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

Ответы 1

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

Безымянный шаблон записывается одним символом подчеркивания (_), но в вашем коде вы написали два символа подчеркивания, поэтому синтаксический анализатор не понимает, что вы здесь пытаетесь сделать.

Использование int __ (два подчеркивания) работает, поскольку __ — действительный идентификатор Java. Вы не используете безымянный шаблон — вы просто привязываете второй компонент записи к локальной переменной с именем __, точно так же, как здесь int x привязывает первый компонент записи к локальной переменной с именем x.

В отличие от безымянного шаблона, вы можете использовать __ как обычную локальную переменную.

if (emp instanceof Employee(int _, int __)) {
    System.out.println(__); // this compiles
    System.out.println(_); // this doesn't compile because "_" is not the name of a variable
}

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