You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 16:53:08