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

Java17中switch的模式匹配增强

时间:2023-04-01 20:37:48 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语句(这是JDK12引入的特性)。另外需要注意的是对于switch表达式中的模式匹配功能,JDK17中的实现还是预览版,理解为主,目前官方环境不推荐使用。不排除未来进一步改进的可能性。好了,今天的分享就到这里!如果你在学习过程中遇到困难?您可以加入我们超优质的技术交流群,参与交流讨论,更好的学习进步!还有,别走,跟我走!持续更新Java新特性专栏!欢迎来到我的公众号:程序员DD。第一时间了解行业前沿资讯,分享深度技术干货,获取优质学习资源