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

Match Case的顺序是否有依赖性?Bar继承Foo时handleBar是否不可达?

模式匹配分支可达性问题解答

当Bar extends Foo时,你给出的match表达式里的handleBar分支完全不可达,原因如下:

在主流支持模式匹配的语言(如Kotlin、Scala、Java 17+)中,match分支的匹配逻辑是按书写顺序从上到下依次检查:只要某个分支的类型匹配条件满足,就会立即执行该分支的逻辑,不会再继续检查后续分支。

因为Bar是Foo的子类,所有Bar类型的实例同时也是Foo类型的实例。当x是Bar实例时,第一个分支的is Foo条件会先成立,直接执行handleFoo(x),后面的is Bar分支永远不会被触发。

如果想要让Bar类型的实例被handleBar处理,必须调整分支顺序,把更具体的类型分支放在前面:

match (x) {
  is Bar -> handleBar(x);
  is Foo -> handleFoo(x);
}

这样Bar实例会优先匹配到第一个分支,而仅属于Foo类型(非Bar子类)的实例才会走到第二个分支。

内容的提问来源于stack exchange,提问作者Mike Samuel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:22:03