前些天 JDK 14 发布了:
重磅:Java 14 正式发布了!html
今天栈长带你们来尝尝 Java14 的鲜,虽然你们都在用着 Java8 或者如下版本,但多学习了解一点总不是坏事。java
好比出去面试啥的,面试官总会问你在学什么新技术,多学习下新知识能够出去和面试官吹水了。若是面试官会,你不会,那你不就 OUT 了!面试
首先打开 JDK14 的下载地址:编程
https://www.oracle.com/java/t...
选择对应系统的版本安装。后端
安装细节就不展开了,相信你们都会,我这里已经装好了,来看下 JDK 版本。安全
$ java -version java version "14" 2020-03-17 Java(TM) SE Runtime Environment (build 14+36-1461) Java HotSpot(TM) 64-Bit Server VM (build 14+36-1461, mixed mode, sharing)
Java14 is ready, let's go!!微信
instanceof模式匹配,至关于加强的 instanceof,这目前仍是 JDK 14 中的预览特性:多线程
https://openjdk.java.net/jeps...
模式匹配的到来将使得 instanceof 变得更简洁、更安全,为何这么说,继续往下看。架构
在 Java 14 以前,咱们判断一个对象是不是某个类派生的实例,是这样使用 instanceof
的:oracle
if (object instanceof Kid) { Kid kid = (Kid) object; // ... }
以上程序作了三件事:
1)判断 object 是不是 Kid 的实例
2)把 object 强制转换为 Kid 类型
3)建立了一个局部变量:kid
虽然这段程序很简单,你们也都是这么用的,并无什么问题。
但这不是最佳的编写方式,判断完以后为何还要进行一次类型强转?这应该不是必需的,并且强转的时候可能类型出错。
假如,我如今想加一个判断是否是 Kiddle 的实例:
if (object instanceof Kid) { Kid kid = (Kid) object; // ... } else if (object instanceof Kiddle) { Kid kid = (Kid) object; // ... }
这时候类型判断完后忘了修改 Kid -> Kiddle,结果仍是强转给 Kid,这时候有两种结果:
1)Kiddle 是 Kid 的子类,不报错
2)Kiddle 不是 Kid 的子类,报错
心态是否是要崩了?
无论怎样,这程序是不健壮了,这确实不是很好的体验,模式匹配就能够避免这种问题的出现。模式匹配其实不少语言已经有了,Java 来得比较晚,但总归是来了,来看下模式匹配该怎么写!
if (object instanceof Kid kid) { // ... } else if (object instanceof Kiddle kiddle) { // ... }
是否是看起来很爽?判断完类型后能够直接拿来用!
模式匹配其实就是对判断类型进行匹配,匹配成功后就把对象强转赋值给类型后面的变量。
注意,这个变量只有在匹配成功后才会建立和赋值,并且做用域仅只能在当前判断分支里面,若是用在分支外会出现编译错误。
另外,回到最开始的程序,若是同时出现不少个 instanceof 判断:
if (object instanceof Kid1) { Kid1 kid1 = (Kid1) object; // ... } else if (object instanceof Kid2) { Kid2 kid2 = (Kid2) object; // ... } else if (object instanceof Kid3) { Kid3 kid3 = (Kid3) object; // ... } else if (object instanceof Kid4) { Kid4 kid4 = (Kid4) object; // ... } else if (object instanceof Kid5) { Kid5 kid5 = (Kid5) object; // ... } else if (object instanceof Kid6) { Kid6 kid6 = (Kid6) object; // ... } else if (object instanceof Kid7) { Kid7 kid7 = (Kid7) object; // ... } else if (object instanceof Kid8) { Kid8 kid8 = (Kid8) object; // ... }
大量的类型转换,这程序会变得有多冗长??
因此,模式匹配不但提升了程序的安全性、健壮性,另外一方面,也减小了大量没必要要的类型转换,大大提升了程序的简洁性、可读性。
另外,switch
在 Java 12 中增强了:Java 12 骚操做, String竟然还能这样玩!。若是可使用 switch
一块儿结合使用,那该多好?这是之后计划的事了。
instanceof模式匹配这真是 Java 中的又一能力的提高,我的以为很实用,不会以为它多余或者像 Java8 中的 Lambda
、函数式编程晦涩难懂。
好了,今天就到这了,关注微信公众号:Java技术栈,新特性实战陆续更新中,公众号第一时间推送。历史 Java 8 - 14 新特性教程能够在公众号回复 java 获取。
栈长原创和整理不易,以为文章不错,在看、转发分享给更多的朋友们,总能帮助有须要的人,你们一块儿流弊~
推荐去个人博客阅读更多:
2.Spring MVC、Spring Boot、Spring Cloud 系列教程
3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程
生活很美好,明天见~