在之前的 Java 17 新特性中,我们介绍过关于 switch的,但当时还只是关于此内容的首个预览版本。之后在 JDK 18、JDK 19、JDK 20 中又都进行了更新和完善。如今,在 JDK 21 中,该特性得到了最终确定!下面,我们就再正式学习一下该功能!

在以往的 switch 语句中,对于 case 中的类型匹配限制是很多的。比如下面这个例子中的 Map 中可能存储了不同类型的对象,我们要判断的时候,就只能依靠 if-else 来完成。

Map<String, Object> data = new HashMap<>();
data.put("key1", "aaa");
data.put("key2", 111);
if (data.get("key1") instanceof String s) {
  log.info(s);
}

if (data.get("key") instanceof String s) {
  log.info(s);
} else if (data.get("key") instanceof Double s) {
  log.info(s);
} else if (data.get("key") instanceof Integer s) {
  log.info(s);
}

现在开始,这样的类型判断关系,就可以简化为如下的 switch 代码:

switch (data.get("key1")) {
  case String s  -> log.info(s);
  case Double d  -> log.info(d.toString());
  case Integer i -> log.info(i.toString());
  default        -> log.info("");
}

这个功能还是非常有用的,尤其是存在一些抽象封装的时候,可能存在一些父子、兄弟等关系类的时候,为了判断是什么类型,就不用写很多 if 来处理了,代码简洁度可以得到进一步的优化。

文章作者: XUEW
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 薛伟的博客
Java 新特性
关注微信公众号,成长路上不迷路。
联系作者
微信 个人微信
微信公众号 微信公众号