首页 > 编程语言 >Java 21 新特性:switch的模式匹配

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

时间:2023-09-20 11:13:27浏览次数:64  
标签:info Java 21 get switch data log

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

标签:info,Java,21,get,switch,data,log
From: https://www.cnblogs.com/didispace/p/17716777.html

相关文章

  • java在try-catch-finally代码块中return或者throw Exception时需注意的问题
    在Java的try-catch-finally代码块中使用return或者throwException时,需要注意以下几个问题:1.Return语句的执行:当在try或catch中使用return语句时,程序会立即退出当前方法并返回指定的值。但是在执行return之前,finally代码块将被执行。如果finally中也包含retur......
  • JAVA-基本程序设计结构(类变量、main语法、代码块、final关键字、抽象类)
    1.类变量和类方法1.类变量1.类变量的定义和语法1.类变量(静态变量/静态属性/静态字段)是该类的所有对象共享的变量,任何一个该类的对象去访问它时,取到的都是相同的值,同样任何一个该类的对象去修改它时,修改的也是同一个变量2.定义语法:访问修饰符static数据类型变量名;[推......
  • java中string与byte[]的转换
    1.string转byte[]byte[]midbytes=isoString.getBytes("UTF8");//为UTF8编码byte[]isoret=srt2.getBytes("ISO-8859-1");ISO-8859-1编码ISO-8859-1为单字节的编码2.byte[]转stringStringisoString=newString(byte......
  • group by 用java代码实现
    importjava.util.ArrayList;importjava.util.HashMap;importjava.util.List;importjava.util.Map;importjava.util.Map.Entry;publicclassListGroup{publicstaticvoidmain(String[]args){List<JavaBean>list=newArrayList<JavaB......
  • java日期操作
    将Date类型写入数据库的两种方法先了解几个类: 1、具体类(和抽象类相对)java.util.Date 2、抽象类java.text.DateFormat和它的一个具体子类,java.text.SimpleDateFormat 3、抽象类java.util.Calendar和它的一个具体子类,java.util.GregorianCalendar......
  • Java验证电子邮箱地址、电话号码
    demo1:/***本类用于处理、检查导入数据的格式*@authorAdministrator*weiwenshuai20110915*/publicclassCheckData{/***验证手机号码、电话号码是否有效*手机号前面加86的情况也考虑*新联通*(中国联通+中国网通)手机号码开头数字130、1......
  • 66基于java的志愿者服务管理系统设计与实现(配套lun文,PPT,可参考做毕业设计)
    本章节给大家带来一个基于java志愿者服务管理系统设计与实现,可适用于校园志愿者活动服务平台,校园爱心志愿者活动,爱心活动管理信息系统,大学志愿者服务平台,大学生志愿者服务平台,大学生爱心活动系统,在线志愿者活动平台,校园志愿者活动,大学志愿者活动平台等等;引言现如今,校园志愿者......
  • 21_消息队列
    消息队列消息队列1、任务级队列处理函数2、中断级队列处理函数(带中断保护)已经在CMSIS接口中封装但写入生产速度比消费速度快的时候,容易出现数据被覆盖邮箱队列创建、发送、接收、查询、删除传数值osEventevent=osMessageGet(myQueue01Handle,osWaitForever);......
  • graalvm jdk 21 版本发布
    graalvm效率还是挺快的,java21版本虚拟线程以及ga可,graalvm对于21版本支持的发布,让我们也可以直接使用了从官方介绍以及解决来看,性能提升是很大的,在一些测试场景中nativeimage比C2jit还快说明目前官方已经提供了21的下载包可以体验使用参考资料https://www.graalvm.......
  • java将map的key转为大写
    普通的stream流,toMap方法会调用merge方法,该方法如果value传值为null的时候,会报空指针异常,因此直接使用collect()方法进行规约操作publicstaticvoidmain(String[]args){Map<String,String>testMap=newHashMap<>();testMap.put("apple",null);testMap.put("......