何时调用密封层次结构 switch 中的默认情况

问题描述 投票:0回答:1

给出如下

sealed
层次结构

sealed interface Shape permits Rectangle, Square

record Rectangle() implements Shape

record Square() implements Shape

由于

Rectangle
Square
是记录,它本质上使整个层次结构不可扩展,即不再允许有更多的子类。

从 JDK 21 开始,

switch
的模式匹配通过覆盖所有可能的
case
或提供
default
案例来覆盖其余部分来强制切换为详尽无遗。

因此,对于以下

switch
,在什么情况下会执行
default
案例,因为涵盖了所有可能的组合,为什么甚至允许这样做?

switch (shape) {
    case Rectangle r -> // do something with r;
    case Square sq -> // do something with sq; 
    case null -> // shape could be null 
    default -> // WHY is this permitted when all possible cases are covered already??
    }

P.S.:密封的层次结构肯定可以进化,但是当这种情况发生时,编译器会自动标记

switch
来升级自身。

java switch-statement java-21
1个回答
0
投票

基本上它就在那里,因为 Java 不能相信你不会在不更新开关的情况下添加另一个 Shape 记录,而且它并没有真正伤害任何东西,所以没有理由禁止它

© www.soinside.com 2019 - 2024. All rights reserved.