Пытаюсь использовать функцию 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.
Не могу понять, что здесь не так
Безымянный шаблон записывается одним символом подчеркивания (_
), но в вашем коде вы написали два символа подчеркивания, поэтому синтаксический анализатор не понимает, что вы здесь пытаетесь сделать.
Использование 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
}