在之前的Java 17新特性中,我们介绍过关于JEP 406: switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在jdk 18、JDK 19、JDK 20中又都进行了更新和完善。如今
在之前的Java 17新特性中,我们介绍过关于JEP 406: switch的模式匹配,但当时还只是关于此内容的首个预览版本。之后在jdk 18、JDK 19、JDK 20中又都进行了更新和完善。如今,在JDK 21中,该特性得到了最终确定!下面,我们就再正式学习一下该功能!
在以往的switch语句中,对于case
中的类型匹配限制是很多的。比如下面这个例子中的Map
中可能存储了不同类型的对象,我们要判断的时候,就只能依靠if-else
来完成。
Map 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。前沿技术早知道,弯道超车有希望!积累超车资本,从关注DD开始!
来源地址:https://blog.csdn.net/dyc87112/article/details/133070414
--结束END--
本文标题: Java 21 新特性:switch的模式匹配
本文链接: https://lsjlt.com/news/418301.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-04-01
2024-04-03
2024-04-03
2024-01-21
2024-01-21
2024-01-21
2024-01-21
2023-12-23
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0