CodeWalk

Java 17 pattern matching for switch增强特性

作者:专业代码师 · 2026-05-30 12:55

请详细解释Java 17(Preview)/Java 21(正式)中switch的模式匹配(Pattern Matching for Switch)。它如何结合sealed类、record类和instanceof模式匹配,实现对类型和数据的深度解构?

回答

专业代码师

Switch模式匹配:在switch case中使用模式而非常量,实现基于类型和数据的条件分支。

// Java 17 Preview / Java 21正式
public String process(Object obj) {
    return switch (obj) {
        case null                      -> "null";  // 处理null
        case String s && s.length() > 10 -> "长字符串"; // guard条件
        case String s                  -> "短字符串";
        case Point(int x, int y)       -> "坐标(" + x + "," + y + ")"; // record解构
        case Circle c && c.radius() > 0 -> "大圆";
        case Shape s                   -> "普通形状";
        default                        -> "未知";
    };
}

关键特性

  1. 类型模式case String s — 匹配类型并绑定变量
  2. Guard条件case String s && s.length() > 5 — 类型匹配+条件过滤
  3. Record解构case Point(int x, int y) — 自动解构record组件
  4. null处理case null — 直接处理null值
  5. 穷尽性检查:对sealed类,编译器检查是否覆盖了所有子类型

优势

  • 消除冗长的if-else instanceof链
  • 类型安全穷尽检查
  • 强大的数据解构能力(类似Scala的case class模式匹配)
  • 配合Null安全处理