首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大清秘史之大话JDK17 中的模式匹配

大清秘史之大话JDK17 中的模式匹配

原创
作者头像
西门呀在吹雪
发布2025-12-09 18:56:42
发布2025-12-09 18:56:42
1660
举报
文章被收录于专栏:架构之巅架构之巅

在 Java 开发中,类型判断与转换是一种极为常见的操作,传统方式依赖 instanceof 结合显式强制转换,代码冗长、易错、可读性差📉。为此,Java 引入增强 instanceof✨,将类型判断与变量绑定合并,简化代码逻辑,提高开发效率与类型安全性🔒。

想象一下,身处清宫的你,能像三朝元老张廷玉👴一样快速区分康熙(开疆拓土型🗺️)、雍正(呕心沥血型💼)、乾隆(老年享受型🎎)的执政风格一样,精准、清晰地处理各种他们各自独特的性格和做事方式(数据类型和结构)。

“这个皇帝,是康熙还是雍正?”🤔 在 Java 8 时代,每次进行类型判断都需要冗长的 instanceof 验证。从 JDK 16 增强的 instanceof 到 JDK 17 的模式匹配 switch🔀,再到 JDK 21 中完善的记录模式📊,Java 的类型处理完成了从“繁缛的八王议政👑”到“高效军机处⚡”的转型🚀。

让我们从传统的类型推断开始看,这是java8时代的判断逻辑

代码语言:java
复制
   Object unknownKing = getKing(66);
        if (unknownKing instanceof Kangxi) {
            Kangxi emperor = (Kangxi) unknownKing; // 强制转换
            System.out.println(emperor.reignPeriod());
        }
        unknownKing = getKing(2);
        if (unknownKing instanceof Qianlong) {
            Qianlong emperor = (Qianlong) unknownKing; // 强制转换
            System.out.println(emperor.reignPeriod());
        }

这里不得不提到这两步固定套路,类型判断和变量使用被割裂开来,增加了不必要的复杂性,样板代码太多类似getter和setter,我们期待一个类似lombok一样的东西可以提升编码效率。

JDK17 带来的变化

代码语言:java
复制
        //JDK 16的简化仪式
        if(unknownKing instanceof Kangxi xuanye){
            System.out.println(xuanye.reignPeriod());
        }
        if(unknownKing instanceof Qianlong hongli){
            System.out.println(hongli.reignPeriod());
        }

上述对比和内容发现,优点很多:

1、减少类型转换代码

2、编译器检查类型安全

3、更简洁明了

JDK21 引入了switch语句

此处我们以获取庙号为例,通过switch语句可以快速实现变量的返回

代码语言:java
复制
       // JDK 21的模式匹配switch
    public static String miaohao(int kingIndex){
        // JDK 21的模式匹配switch
        Object period = getKing(kingIndex);
        String miaohao = switch(period) {
            case Kangxi emperor -> "合天弘运文武睿哲恭俭宽裕孝敬诚信中和圣文皇帝";
            case Qianlong emperor -> "法天隆运至诚先觉体元立极敷文奋武钦明孝慈神圣纯皇帝";
            default -> "亡国之君没有庙号 ";
        };
        return miaohao;
    }

这种新语法不仅更简洁,还引入了箭头语法->,免去了break语句的烦恼,同时支持将switch作为表达式直接返回值,简化了代码,提高了编写效率,当然如果喜欢了增强版--的一直用也没毛病

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 让我们从传统的类型推断开始看,这是java8时代的判断逻辑
  • JDK17 带来的变化
  • 上述对比和内容发现,优点很多:
  • JDK21 引入了switch语句
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档