Java 22记录模式匹配编译报错:需指定通配符__的类型
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); }
编译时出现错误:Syntax error, insert "RecordStructurePattern" to complete RecordPattern,但将代码修改为Employee(int x, int __)后即可正常编译,其中Employee是一个record类。
原因解析
Java的__下划线通配符是类型模式的组成部分,不能单独在记录模式的组件位置使用——它必须和具体的类型声明搭配,才能构成合法的「类型通配模式」。
记录模式的语法要求每个组件位置必须是一个完整的模式:
- 要么是「绑定模式」(比如
int x,将匹配的值绑定到变量x) - 要么是「类型通配模式」(比如
int __,匹配指定类型的任意值,不绑定到变量) - 或是嵌套的其他模式(比如另一个记录模式)
当你写Employee(int x, __)时,第二个组件位置只有__,没有指定对应的类型,编译器无法识别这是一个合法的模式结构,因此抛出语法错误,提示你补全符合要求的RecordStructurePattern。而Employee(int x, int __)中,int __是完整的类型通配模式:明确指定了匹配的类型为int,并用__表示忽略该位置的值,完全符合Java 22记录模式的语法规则,因此可以正常编译。
补充说明
如果你的Employee record类的第二个字段类型不是int,而是其他类型(比如String),那么对应的合法写法应该是Employee(int x, String __),必须保证类型声明和record字段的实际类型一致。
内容的提问来源于stack exchange,提问作者Shiladittya Chakraborty
相关产品推荐
相关产品推荐

