Java 14 instanceof 的模式匹配

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 版本的代码更易懂。通过这种方式可以减少大量的类型转换,可读性大大提高。

扫描二维码关注公众号,回复: 10103652 查看本文章

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

4. 结论

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

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

如果我的文章对你有帮助,欢迎关注,点赞评论!!

发布了379 篇原创文章 · 获赞 862 · 访问量 132万+

猜你喜欢

转载自blog.csdn.net/w605283073/article/details/105020544