本文是 Java 14 系列教程的其中一篇,本文主要讲述 InstanceOf 的模式匹配。
JEP 305 的核心目的是让创建对象更简单、简洁、可读性更强而且更加安全。
很多时候,我们需要检查对象的类型,然后根据类型去编写不同的逻辑。通常会使用 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 的具体类型,然后强制类型转换声明为局部变量。然后根据具体的类型执行特定的函数。
这有很多缺点:
下面将介绍 Java 14 提供的改进特性。
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)函数时非常有用。
本篇简短的文章讲述了 Java 14 instanceof 进行模式匹配。使用 Java 内置语言特性帮助我们编写质量更高,可读性更强的代码。
一如既往,我们的完整代码可以在 GitHub 上获取到。