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

Java 21中使用模式匹配的switch表达式处理枚举时出现错误分支匹配的问题咨询

Java 21中使用模式匹配的switch表达式处理枚举时出现错误分支匹配的问题咨询

各位好,我最近在Java 21环境下写枚举相关代码时碰到个奇怪的问题,想请教下大家。

先看这段没问题的传统switch代码:

public class EnumSandboxTest {

    public static void main(String[] args) {
        TestEnum test = TestEnum.D; 
        String par = "9999";
        switch (test)
        {
            case D: 
                System.out.println(par.length() < 5 ? "D2" : "D");
                break;
            case E: 
                System.out.println(par.length() < 4 ? "E2" : "E");
                break;
            default: System.out.println("EMPTY (DEFAULT)");
        };
    }   
    private enum TestEnum
    {
        D,E;
    }
}

这段代码运行后会按预期打印出D2,完全符合我的预期。

可是当我把switch改成用表达式和模式匹配的写法后,就出现了分支匹配错误的情况。修改后的代码片段是这样的:

switch (test)
{
    case D -> System.out.println("D");
    case E -> System.out.println("E");
    case TestEnum p -> // 后续的处理逻辑
}

我明明把test赋值成了TestEnum.D,结果代码没有走到case D的分支,反而匹配到了case TestEnum p这个分支,这实在让我摸不着头脑。有没有朋友能帮我分析下这是为什么呀?

备注:内容来源于stack exchange,提问作者simonalexander2005

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 13:29:33