JDK 14的新特性:instanceof模式匹配

JDK14在2020年的3月正式发布了。可惜的是正式特性只包含了最新的Switch表达式,而Records,patterns,text blocks仍然是预览特性。

本文要讲的就是JDK14的一个预览特性instanceof的pattern matching。 也就是说在instanceof中可以使用模式匹配了。

怎么理解呢?

我们先举个历史版本中使用instanceof的例子。

假如我们是动物园的管理员,动物园里面有Girraffe和Hippo两种动物。

@Data
public class Girraffe {private String name;
}
@Data
public class Hippo {private String name;
}

为了简单起见,上面两种动物我们都之定义一个name属性。

接下来我们要对两种动物进行管理,传入一个动物,判断一下这个动物是不是上面两种动物之一,按照传统的办法,我们应该这样做:

    public void testZooOld(Object animal){if(animal instanceof Girraffe){Girraffe girraffe = (Girraffe) animal;log.info("girraffe name is {}",girraffe.getName());}else if(animal instanceof Hippo){Hippo hippo = (Hippo) animal;log.info("hippo name is {}",hippo.getName());}throw new IllegalArgumentException("对不起,该动物不是地球上的生物!");}

上面的代码中, 如果instanceof确认成功,我们还需要将对象进行转换,才能调用相应对象中的方法。

有了JDK 14,一切都变得容易了,我们看下最新的JDK 14的模式匹配怎么做:

    public void testZooNew(Object animal){if(animal instanceof Girraffe girraffe){log.info("name is {}",girraffe.getName());}else if(animal instanceof Hippo hippo){log.info("name is {}",hippo.getName());}throw new IllegalArgumentException("对不起,该动物不是地球上的生物!");}

注意instanceof的用法,通过instanceof的模式匹配,就不需要二次转换了。直接使用就可以了。并且模式匹配的对象还被限定了作用域范围,会更加安全。

注意,如果你使用的最新版的IntelliJ IDEA 2020.1版本的话,语言编译版本一定要选择14(Preview),因为这个功能是preview的。

本文的例子https://github.com/ddean2009/learn-java-base-9-to-20

更多精彩内容且看:

  • 区块链从入门到放弃系列教程-涵盖密码学,超级账本,以太坊,Libra,比特币等持续更新
  • Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
  • Spring 5.X系列教程:满足你对Spring5的一切想象-持续更新
  • java程序员从小工到专家成神之路(2020版)-持续更新中,附详细文章教程

欢迎关注我的公众号:程序那些事,更多精彩等着您!

更多内容请访问 www.flydean.com

JDK 14的新特性:instanceof模式匹配相关推荐

  1. JDK 14的新特性:更加好用的NullPointerExceptions

    JDK 14的新特性:更加好用的NullPointerExceptions 让99%的java程序员都头痛的异常就是NullPointerExceptions了.NullPointerExceptio ...

  2. JDK 14的新特性:switch表达式

    文章目录 简介 写在前面 连写case switch返回值 yield 总结 简介 switch的新特性可是源远流长,早在JDK 12就以预览功能被引入了,最终在JDK 14成为了正式版本的功能:JE ...

  3. JDK 14的新特性:文本块Text Blocks

    文章目录 举个例子 Indentation编排 Escaping转义 formatted格式化 总结 说起来,Text Blocks是在JDK13中以第一次预览版本引入的.现在在JDK14中是第二次预 ...

  4. eplan文本怎么换行_JDK 14的新特性:文本块Text Blocks

    说起来,Text Blocks是在JDK13中以第一次预览版本引入的.现在在JDK14中是第二次预览版本 JEP 368: Text Blocks. 在我们日常的工作中,有时候需要用到一大段的字符串, ...

  5. Java 15 正式发布, 14 个新特性,刷新你的认知!!

    JDK 15 2020/09/15 如期而至! 这个时间牛逼啊,和苹果发布会同天? OracleJDK 15 发布地址: https://www.oracle.com/java/technologie ...

  6. JDK各版本新特性(更新到Java20)

    Hello,I'm Shendi 每当Java出新版本我会第一时间更新 目录 各版本JDK下载 JDK 1.0 1996-01-23 Oak(橡树) JDK 1.1 1997-02-19 JDK 1. ...

  7. java 新特性_Java 9的14个新特性总结

    原标题:Java 9的14个新特性总结 作者 | Aboullaite Mohammed 翻译 |Kenneth Java 9 包含了丰富的特性集.虽然Java 9没有新的语言概念,但是有开发者感兴趣 ...

  8. JDK 5 ~ 10 新特性倾情整理

    转载自 JDK 5 ~ 10 新特性倾情整理 最近连 JDK11都在准备发布的路上了,大家都整明白了吗?也许现在大部分人还在用6-8,8的新特性都没用熟,9刚出不久,10-11就不用说了. 为了大家对 ...

  9. 各个JDK版本的新特性

    一.各个JDK版本的新特性 (1)JDK 5 : 1 . 自动装箱 2 . 泛型 3 . 动态注释 4 . 枚举 5 . 可变长参数 6 . 遍历循环 7 . 改进了 Java 的内存模型 8 . 提 ...

最新文章

  1. VirtualBox虚拟机开机后台自启动
  2. 企业网络推广时网站获取排名离不开企业网络推广文章内容的更新
  3. 批处理命令 For循环命令具体解释!
  4. 解体症状---被封印的灵魂
  5. 关于私有变量,静态私有变量
  6. 使用Redis实现分布式锁
  7. K8S+Docker理论与实践深度集成
  8. VMWare网络设置的3中方式
  9. python中sys模块有问题_python中sys模块之输入输出错误流
  10. OSX/Linux 配置SSH免密登录并配置(Alias)别名登录
  11. C语言 · 字符串输入输出函数
  12. struts2——快速入门
  13. SolidWorks二次开发经验总结
  14. 一文掌握机器学习算法工程师技术栈
  15. 新浪云mysql_php连接mysql数据库(新浪云SAE)
  16. CentOS防火墙配置(资源)
  17. APP创业经:比开发更难的是APP运营和推广
  18. plot函数--R语言
  19. 知道一个公司的网站地址,怎么快速获取邮箱。
  20. 17个你必须牢记的Win7快捷键

热门文章

  1. Python实战-获取鼠标键盘事件
  2. c oracle帮助类,C#DbHelperOra,Oracle数据库帮助类
  3. sscanf函数用法详解
  4. VC程序初始化隐藏窗体
  5. 告别DNS劫持,一文读懂DoH
  6. 后悔!我早该把这1W字详解的 InnoDB 原理给你!
  7. Redis的内存淘汰策略问题
  8. Java程序员面试必备的一些流程图
  9. JAVA多线程之扩展ThreadPoolExecutor
  10. KubeSphere 3.1.0 GA:混合多云走向边缘,让应用无处不在