网站首页 > java教程 正文
今天栈长带大家来尝尝 Java14 的鲜,虽然大家都在用着 Java8 或者以下版本,但多学习了解一点总不是坏事。
比如出去面试啥的,面试官总会问你在学什么新技术,多学习下新知识可以出去和面试官吹水了。如果面试官会,你不会,那你不就 OUT 了!
JDK14 下载安装
首先打开 JDK14 的下载地址:
https://www.oracle.com/java/technologies/javase-jdk14-downloads.html
选择对应系统的版本安装。
安装细节就不展开了,相信大家都会,我这里已经装好了,来看下 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模式匹配,相当于增强的 instanceof,这目前还是 JDK 14 中的预览特性:
https://openjdk.java.net/jeps/305
模式匹配的到来将使得 instanceof 变得更简洁、更安全,为什么这么说,继续往下看。
在 Java 14 之前,我们判断一个对象是否是某个类派生的实例,是这样使用 instanceof 的:
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 新特性教程可以关注获取。
栈长原创和整理不易,觉得文章不错,在看、转发分享给更多的朋友们,总能帮助有需要的人,大家一起流弊~
猜你喜欢
- 2024-10-10 架构师必须搞懂DNS,一篇文章 就够了
- 2024-10-10 Spring Boot 最核心的 25 个注解,都是干货!
- 2024-10-10 别再面向 for 循环编程了,JDK 自带的观察者模式就很香
- 2024-10-10 Spring Cloud 如何动态刷新 Git 仓库配置?
- 2024-10-10 公司来了个新同事不会用 Lombok,还说我代码有问题
- 2024-10-10 Spring Boot 怎么打一个可执行 Jar 包?
- 2024-10-10 你必须了解Spring的生态(spring 生态)
- 2024-10-10 Java技术栈ppt分享:大数据+架构篇+算法篇(阿里巴巴内部资料)
- 2024-10-10 腾讯牛逼!终于开源了自家的 JDK——Kona
- 2024-10-10 Spring Boot Redis 实现分布式锁,真香
你 发表评论:
欢迎- 最近发表
-
- Java常量定义防暴指南:从"杀马特"到"高富帅"的华丽转身
- Java接口设计原则与实践:优雅编程的艺术
- java 包管理、访问修饰符、static/final关键字
- Java工程师的代码规范与最佳实践:优雅代码的艺术
- 编写一个java程序(编写一个Java程序计算并输出1到n的阶乘)
- Mycat的搭建以及配置与启动(mycat部署)
- Weblogic 安装 -“不是有效的 JDK Java 主目录”解决办法
- SpringBoot打包部署解析:jar包的生成和结构
- 《Servlet》第05节:创建第一个Servlet程序(HelloSevlet)
- 你认为最简单的单例模式,东西还挺多
- 标签列表
-
- java反编译工具 (77)
- java反射 (57)
- java接口 (61)
- java随机数 (63)
- java7下载 (59)
- java数据结构 (61)
- java 三目运算符 (65)
- java对象转map (63)
- Java继承 (69)
- java字符串替换 (60)
- 快速排序java (59)
- java并发编程 (58)
- java api文档 (60)
- centos安装java (57)
- java调用webservice接口 (61)
- java深拷贝 (61)
- 工厂模式java (59)
- java代理模式 (59)
- java.lang (57)
- java连接mysql数据库 (67)
- java重载 (68)
- java 循环语句 (66)
- java反序列化 (58)
- java时间函数 (60)
- java是值传递还是引用传递 (62)
本文暂时没有评论,来添加一个吧(●'◡'●)