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

Java 22中如何简洁实现枚举类型的Switch模式匹配?

解决方案

在Java 22中,可通过记录模式结合枚举常量模式实现无需默认分支的穷尽匹配,写法简洁且能被编译器识别为完全覆盖所有枚举情况。

正确写法

方式一:直接使用枚举常量(无命名冲突时)

final var paxosEvent = new PaxosEvent(role, msg);
switch (paxosEvent) {
    case PaxosEvent(FOLLOWER, var msg) -> {
        // 处理FOLLOWER角色逻辑
    }
    case PaxosEvent(RECOVERER, var msg) -> {
        // 处理RECOVERER角色逻辑
    }
    case PaxosEvent(LEADER, var msg) -> {
        // 处理LEADER角色逻辑
    }
}

方式二:限定枚举类(避免命名冲突)

如果代码中存在同名常量,可显式指定枚举类:

switch (paxosEvent) {
    case PaxosEvent(PaxosRole.FOLLOWER, var msg) -> {
        // 处理FOLLOWER角色逻辑
    }
    case PaxosEvent(PaxosRole.RECOVERER, var msg) -> {
        // 处理RECOVERER角色逻辑
    }
    case PaxosEvent(PaxosRole.LEADER, var msg) -> {
        // 处理LEADER角色逻辑
    }
}

关键说明

  1. 特性支持:枚举常量模式在JDK 21中是预览特性,JDK 22已正式纳入标准,无需额外开启预览参数。
  2. 穷尽匹配验证:编译器会自动枚举所有常量分支,确认匹配覆盖完全,因此不需要添加默认分支。
  3. IDE问题排查:若IDE仍提示"Unknown class",检查PaxosRole枚举是否正确导入,或确认IDE的项目Java版本配置为22。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 06:43:15