结合Java 22示例解析Switch块穷尽性判定规则疑问
Java 22 Switch块穷尽性判定规则解析
一、“对应于组件ci的记录模式的组件模式”中“对应于”的含义
这里的“对应于”指的是组件模式直接绑定到记录类型的某个特定组件。以你的示例为例:
record Box(I i) { }定义了一个带组件i的记录类型Boxcase Box(A a)中的A a就是对应于Box的组件ci(即i)的组件模式——它专门用来匹配Box实例中i组件的实际类型(这里是A)
简单说,记录模式的括号内的每个模式,都对应记录定义里的一个组件,“对应于”就是这种一一绑定的关联关系。
二、模式集合{A a, B b, C c}可归约为模式I i的来源
这个集合的来源是密封类型的所有允许实现/子类:
- 你定义的
sealed interface I permits A, B, C是密封接口,明确指定了所有允许的实现类是A、B、C A、B是final类,C是隐式final的记录类,这三个类型覆盖了I类型的所有可能实例——没有其他类能实现I- 因此,匹配
A a、B b、C c这三个模式的集合,就等价于匹配所有I类型的实例,也就是可归约为I i模式
结合示例的穷尽性验证
你的示例中switch (b)是穷尽的,逻辑链如下:
- 切换表达式的类型是
Box,每个case都用Box(...)记录模式匹配Box实例 - 每个记录模式的组件模式分别匹配
Box的i组件的三种可能类型(A、B、C) - 由于
I是密封接口,这三个组件模式覆盖了i组件的所有可能类型,因此所有Box实例都能被某个case匹配
内容的提问来源于stack exchange,提问作者user24723440
相关产品推荐
相关产品推荐

