Java 21 新特性:switch的模式匹配

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

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

java 复制代码
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代码:

java 复制代码
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。第一时间了解前沿行业消息、分享深度技术干货、获取优质学习资源

相关推荐
组合缺一3 分钟前
Solon AI (Java) v3.9 正式发布:全能 Skill 爆发,Agent 协作更专业!仍然支持 java8!
java·人工智能·ai·llm·agent·solon·mcp
MSTcheng.8 分钟前
【C++】C++11新特性(二)
java·开发语言·c++·c++11
一 乐11 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
KIKIiiiiiiii12 分钟前
微信个人号API二次开发中的解决经验
java·人工智能·python·微信
80530单词突击赢13 分钟前
SpringBoot整合SpringMVC全解析
java·spring boot·后端
vx1_Biye_Design23 分钟前
基于Spring Boot+Vue的学生管理系统设计与实现-计算机毕业设计源码46223
java·vue.js·spring boot·spring·eclipse·tomcat·maven
vx_Biye_Design24 分钟前
基于Spring Boot+vue的湖北旅游景点门票预约平台的设计--毕设附源码29593
java·vue.js·spring boot·spring cloud·servlet·eclipse·课程设计
hay_lee43 分钟前
Spring AI实现对话聊天-流式输出
java·人工智能·ollama·spring ai
Hx_Ma161 小时前
SpringBoot数据源自动管理
java·spring boot·spring
SunnyDays10111 小时前
Java 高效实现 CSV 转 Excel
java·csv转excel