本文目录#

新特性概览#

JDK 17 引入 preview 版的模式匹配 switch(JEP 406),允许在 switch 中对类型和结构进行匹配,减少层层 instanceof 判断。可用于事件路由、DSL 解析等场景。

示例#

1
2
3
4
5
6
String result = switch (obj) {
case OrderCreated(var id, var amount) -> processCreated(id, amount);
case OrderCancelled(var id, var reason) when reason != null -> logCancel(id, reason);
case String s -> s.toUpperCase();
default -> "UNKNOWN";
};
  • when 子句可添加守卫条件;
  • 注意所有分支需穷尽。

实践建议#

  • 在模块化项目中统一启用 --enable-preview
  • 对枚举/密封类优先使用 switch 模式匹配;
  • 在日志系统中利用模式匹配处理多种事件类型。

自检清单#

  • 是否覆盖所有 permits 子类,避免 MatchException
  • 是否在守卫条件中处理空指针?
  • 是否在构建、测试、运行阶段统一开启预览特性?

参考资料#


本作品系原创,采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,转载请注明出处。