try 使用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.

无法理解这里出了什么问题

推荐答案

unnamed pattern是用single强调线(_)字符编写的,但在您的代码中您写了2个强调线,因此解析器不明白您在这里试图做什么.

使用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
}

Java相关问答推荐

如何让TaskView总是添加特定的列来进行排序?

基于仅存在于父级中的字段查询子文档?

将Nimbus设置为计算机上运行的所有Java应用程序的默认外观

将不受支持的时区UT重写为UTC是否节省?

在Java中,如何按一个属性升序,然后按另一个属性降序对对象列表进行排序?

我如何知道MediaDiscoverer何时完成发现介质?

我如何解释这个错误?必需类型:供应商R,提供:收集器对象,捕获?,java.util.List java.lang.Object>>

如何在不删除Java中已有内容的情况下覆盖文件内容?

EXCEL中的公式单元格显示#NAME?

有谁能帮我修一下这个吗?使输出变得更加整洁

为什么在下面的Java泛型方法中没有类型限制?

深度优先搜索实现:算法只向右搜索

使用迭代器遍历HashMap不会因IF条件而停止

如何在字节数组中反转UTF-8编码?

在整数列表中查找和可被第三个整数整除的对时出现无法解释的RunTimeError

循环不起作用只有第一个元素重复

使用@ExceptionHandler的GlobalExceptionHandler还是来自服务器的REST应答的ResponseEntity?

转换为JSON字符串时,日期按天递减-Java

JavaFX中ListView中的问题

人们在 IntelliJ 上将-Dhttp.proxyHost=your.proxy.net -Dhttp.proxyPort=8080放在哪里?