关于java:Java-21-新特性switch的模式匹配

在之前的Java 17新个性中,咱们介绍过对于JEP 406: 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来解决了,代码简洁度能够失去进一步的优化。

对于下面的例子,还没有降级到Java 17的用户,还波及两个两头知识点,倡议能够补充学习一下:第一个是Java 16中的instance of加强;第二个是switch中应用Lambda的加强。

如果您学习过程中如遇艰难?能够退出咱们超高品质的技术交换群,参加交换与探讨,更好的学习与提高!

欢送关注我的公众号:程序猿DD。第一工夫理解前沿行业音讯、分享深度技术干货、获取优质学习资源

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理