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


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

  • 相关阅读:
    Linux_7_软件管理
    SAP FICO产品成本组件分析表开发说明书(包括开发源代码、测试样例及FS)
    医保医用耗材编码目录——在线查询
    springcloud相关面试题
    React 路由 V5(完整版)
    爬虫爬取人民网
    MySQL MMM高可用架构
    网络安全-内网安全加固方案
    ESP32_esp-idf_lvgl_V8环境搭建移植
    python类中的下划线
  • 原文地址:https://www.cnblogs.com/didispace/p/17716777.html