Java 14 之模式匹配,非常赞的一个新特性!

简介: 前些天 JDK 14 发布了: 重磅:Java 14 正式发布了!

前些天 JDK 14 发布了: 重磅:Java 14 正式发布了!


今天栈长带大家来尝尝 Java14 的鲜,虽然大家都在用着 Java8 或者以下版本,但多学习了解一点总不是坏事。


比如出去面试啥的,面试官总会问你在学什么新技术,多学习下新知识可以出去和面试官吹水了。如果面试官会,你不会,那你不就 OUT 了!


JDK14 下载安装

首先打开 JDK14 的下载地址:


https://www.oracle.com/java/technologies/javase-jdk14-downloads.html

image.png选择对应系统的版本安装。

安装细节就不展开了,相信大家都会,我这里已经装好了,来看下 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)

ava14 is ready, let's go!!


开篇:instanceof 模式匹配

instanceof模式匹配,相当于增强的 instanceof,这目前还是 JDK 14 中的预览特性:


https://openjdk.java.net/jeps/305


模式匹配的到来将使得 instanceof 变得更简洁、更安全,为什么这么说,继续往下看。


在 Java 14 之前,我们判断一个对象是否是某个类派生的实例,是这样使用 instanceof 的:


image.png

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 获取。


栈长原创和整理不易,觉得文章不错,在看、转发分享给更多的朋友们,总能帮助有需要的人,大家一起流弊~


相关文章
|
3月前
|
Java API 数据处理
Java新特性:使用Stream API重构你的数据处理
Java新特性:使用Stream API重构你的数据处理
Java API 开发者
121 0
|
5月前
|
存储 Java 大数据
Java 大视界 -- Java 大数据在智能家居能源消耗模式分析与节能策略制定中的应用(198)
简介:本文探讨Java大数据技术在智能家居能源消耗分析与节能策略中的应用。通过数据采集、存储与智能分析,构建能耗模型,挖掘用电模式,制定设备调度策略,实现节能目标。结合实际案例,展示Java大数据在智能家居节能中的关键作用。
|
5月前
|
并行计算 Java API
Java List 集合结合 Java 17 新特性与现代开发实践的深度解析及实战指南 Java List 集合
本文深入解析Java 17中List集合的现代用法,结合函数式编程、Stream API、密封类、模式匹配等新特性,通过实操案例讲解数据处理、并行计算、响应式编程等场景下的高级应用,帮助开发者提升集合操作效率与代码质量。
259 1
|
5月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
637 0
|
5月前
|
缓存 安全 Java
Java 并发新特性实战教程之核心特性详解与项目实战
本教程深入解析Java 8至Java 19并发编程新特性,涵盖CompletableFuture异步编程、StampedLock读写锁、Flow API响应式流、VarHandle内存访问及结构化并发等核心技术。结合电商订单处理、缓存系统、实时数据流、高性能计数器与用户资料聚合等实战案例,帮助开发者高效构建高并发、低延迟、易维护的Java应用。适合中高级Java开发者提升并发编程能力。
169 0
|
5月前
|
安全 Java API
Java 17 及以上版本核心特性在现代开发实践中的深度应用与高效实践方法 Java 开发实践
本项目以“学生成绩管理系统”为例,深入实践Java 17+核心特性与现代开发技术。采用Spring Boot 3.1、WebFlux、R2DBC等构建响应式应用,结合Record类、模式匹配、Stream优化等新特性提升代码质量。涵盖容器化部署(Docker)、自动化测试、性能优化及安全加固,全面展示Java最新技术在实际项目中的应用,助力开发者掌握现代化Java开发方法。
269 1
|
5月前
|
IDE Java API
Java 17 新特性与微服务开发的实操指南
本内容涵盖Java 11至Java 17最新特性实战,包括var关键字、字符串增强、模块化系统、Stream API、异步编程、密封类等,并提供图书管理系统实战项目,帮助开发者掌握现代Java开发技巧与工具。
298 1
|
5月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
179 2
|
5月前
|
Java 应用服务中间件 Docker
java-web部署模式概述
本文总结了现代 Web 开发中 Spring Boot HTTP 接口服务的常见部署模式,包括 Servlet 与 Reactive 模型、内置与外置容器、物理机 / 容器 / 云环境部署及单体与微服务架构,帮助开发者根据实际场景选择合适的方案。
216 25