当前位置: 首页 > 后端技术 > Java

Java17新特性:switch模式匹配(预览版)

时间:2023-04-01 14:23:16 Java

还记得Java16中的instanceof增强吗?回忆一下下面的例子:Mapdata=newHashMap<>();data.put("key1","aaa");data.put("key2",111);if(data.get("key1")instanceofStrings){log.info(s);}上面的场景,Map中有不同类型的Value值,所以使用instanceof来判断提取值的类型,然后根据不同的类型来处理。那么,继续思考一个问题,如果这个Map中的Value可能有这几种类型:String,Integer,Double,我们需要针对不同的类型做不同的处理,处理结构是不是应该这样写:if(data.get("key")instanceofStrings){log.info(s);}elseif(data.get("key")instanceofDoubles){log.info(s);}elseif(data.get("key")instanceofIntegers){log.info(s);}面对这样的if语句结构,看着是不是很不舒服?根据以往的经验,此时会不会想到用switch来改进一下呢?但是转念一想,发现这里的判断使用了instanceof。好像不太容易下手?所以,面对这种场景,Java17增强了switch,那么我们可以这样写:switch(data.get("key1")){caseStrings->log.info(s);caseDoubled->log.info(d.toString());caseIntegeri->log.info(i.toString());default->log.info("");}有没有变的很简洁?这里有几个重点值得关注:case条件直接覆盖了类型判断和类型转换。这个功能类似于Java16中instanceof的增强,每个case的处理逻辑都是用Lambda语法实现的,可以去掉break语句(这是JDK14的新特性:switch表达式增强引入的功能)另外需要注意的是,对于switch表达式中模式匹配的功能,JDK17中的实现还是预览版,理解为主,暂时还没有。建议在正式环境下使用,不排除日后进一步完善的可能。本文内容对应的视频已经录制完毕,点击查看:Java17新特性:switch模式匹配(预览)好了,今天的分享就到这里!如果你在学习过程中遇到困难?您可以加入我们超优质的技术交流群,参与交流讨论,更好的学习进步!还有,别走,跟我走!持续更新Java新特性专栏!欢迎来到我的公众号:程序员DD。第一时间了解行业前沿资讯,分享深度技术干货,获取优质学习资源