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

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 点赞

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

评论

作者其他优质文章

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

100积分直接送

付费专栏免费学

大额优惠券免费领

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

举报

0/150
提交
取消