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

结合Java 22示例解析Switch块穷尽性判定规则疑问

Java 22 Switch块穷尽性判定规则解析

一、“对应于组件ci的记录模式的组件模式”中“对应于”的含义

这里的“对应于”指的是组件模式直接绑定到记录类型的某个特定组件。以你的示例为例:

  • record Box(I i) { } 定义了一个带组件i的记录类型Box
  • case Box(A a) 中的A a就是对应于Box的组件ci(即i)的组件模式——它专门用来匹配Box实例中i组件的实际类型(这里是A)

简单说,记录模式的括号内的每个模式,都对应记录定义里的一个组件,“对应于”就是这种一一绑定的关联关系。

二、模式集合{A a, B b, C c}可归约为模式I i的来源

这个集合的来源是密封类型的所有允许实现/子类:

  1. 你定义的sealed interface I permits A, B, C是密封接口,明确指定了所有允许的实现类是A、B、C
  2. A、B是final类,C是隐式final的记录类,这三个类型覆盖了I类型的所有可能实例——没有其他类能实现I
  3. 因此,匹配A a、B b、C c这三个模式的集合,就等价于匹配所有I类型的实例,也就是可归约为I i模式

结合示例的穷尽性验证

你的示例中switch (b)是穷尽的,逻辑链如下:

  1. 切换表达式的类型是Box,每个case都用Box(...)记录模式匹配Box实例
  2. 每个记录模式的组件模式分别匹配Box的i组件的三种可能类型(A、B、C)
  3. 由于I是密封接口,这三个组件模式覆盖了i组件的所有可能类型,因此所有Box实例都能被某个case匹配

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:39:59