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

Pattern Matching for instanceof:子类型匹配父类型未触发编译错误的疑问

关于JEP 394中instanceof编译错误规则的澄清

你提到的JEP 394里的编译时错误规则,仅适用于带模式变量绑定的instanceof模式匹配语法,而非传统的instanceof类型检查表达式。

  • 传统的instanceof语法(如你的代码n instanceof Number)只是做类型兼容性检查,即使表达式的静态类型是目标类型的子类型,编译器也不会报错——因为这种写法在某些场景下仍有意义(比如处理可能的null值:如果n是null,n instanceof Number会返回false)。
  • 而JEP 394新增的模式匹配式instanceof(即带变量绑定的写法,比如n instanceof Number num)才会触发编译错误:当表达式的静态类型是目标类型的子类型时,这个模式匹配必然成功,绑定变量的操作毫无意义,编译器会直接报错。

举个例子,以下代码才会触发JEP 394中描述的编译错误:

Integer n = 1;
if (n instanceof Number num) { // 编译错误:Integer是Number的子类型,该模式始终匹配
    System.out.println("hi");
}

而你提供的代码使用的是传统instanceof语法,不属于JEP 394规则的约束范围,因此可以正常编译运行。

内容的提问来源于stack exchange,提问作者energize-cactus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 09:57:08