为了账号安全,请及时绑定邮箱和手机立即绑定

Java 14 instanceof 的模式匹配

标签:
Java

1. 概述

本文是 Java 14 系列教程的其中一篇,本文主要讲述 InstanceOf 的模式匹配。

JEP 305 的核心目的是让创建对象更简单、简洁、可读性更强而且更加安全。

2. 传统的 instanceOf 操作

很多时候,我们需要检查对象的类型,然后根据类型去编写不同的逻辑。通常会使用 instanceof 进行判断,然后再对对象进行强制类型转换。

if (animal instanceof Cat) {
    Cat cat = (Cat) animal;
    cat.meow();
   // other cat operations
} else if (animal instanceof Dog) {
    Dog dog = (Dog) animal;
    dog.woof();
    // other dog operations
}
 
// More conditional statements for different animals

在上述代码示例中,我们每种情况要通过 instanceof 判断 animal 的具体类型,然后强制类型转换声明为局部变量。然后根据具体的类型执行特定的函数。

这有很多缺点:

  • 这么写非常单调乏味,需要检测类型然后强制类型转换。
  • 每个if 都要出现三次类型名。
  • 类型转换和变量声明可读性很差
  • 重复声明类型名意味着很容易出错。可能导致未预料到的运行时错误。
  • 每新增一个animal 类型就要修改这里的函数。

下面将介绍 Java 14 提供的改进特性。

3. Java 14 改进版的 instanceOf

Java 14 带来了新版的 instanceof 操作,将参数类型检查和绑局部变量类型合并到了一起。

if (animal instanceof Cat cat) {
    cat.meow();
} else if(animal instanceof Dog dog) {
    dog.woof();
}

首先在 if 代码块对 animal 的类型和 Cat 进行匹配。 先看 animal 变量是否为 Cat 类型的实例,如果是,强转为 Cat 类型,并赋值给 cat。

注意变量名 cat 并不是一个存在的变量,而是模式变量的声明。

变量 cat 和 dog 只有当模式匹配表达式的结果为 true 时才生效和赋值。如果你把变量在别的地方用,会出现编译错误。

正如上面讲到的, Java 14 版本的代码更易懂。通过这种方式可以减少大量的类型转换,可读性大大提高。

此外,这种类型的测试模式,在编写 equality (equals)函数时非常有用。

4. 结论

本篇简短的文章讲述了 Java 14 instanceof 进行模式匹配。使用 Java 内置语言特性帮助我们编写质量更高,可读性更强的代码。

一如既往,我们的完整代码可以在 GitHub 上获取到。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
3857
获赞与收藏
1465

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消