介绍
根据一些调查(如JetBrains的出色调查),尽管Java 8是2014年发行的,但它目前是使用最多的Java版本。
本文是系列文章中的第一篇,标题为“超越Java 8”,其灵感来自于我的《Java for Aliens》一书的内容。这些文章将引导读者逐步探索从Java 9引入的最重要的功能。其目的是使读者了解从Java 8向前迈进的重要性,并说明最新的Java带来的巨大优势。语言版本。
在本文中,我们将看看Java 14中作为预览功能引入的一个有趣的新颖性(请参阅相关文章)。这是称为模式匹配的复杂功能的第一部分。尽管将来,它将影响将来的各种编程结构,但是模式匹配仅可与instanceof操作员一起用作功能预览。这将从根本上改变我们使用此运算符的方式。
该instanceof运营商
instanceof与比较运算符一样,二进制运算符将返回布尔值。该运算符的独特之处在于它使用引用作为第一个操作数,并使用复杂类型作为第二个操作数。true如果在运行时引用(定义第一个操作数)指向由类型(定义第二个操作数)实例化的对象,则返回。true即使引用指向由第二个操作数指定的类型的子类实例化的对象,它也会返回。如果不满足这两个条件之一,则instanceof操作员返回false。
例
假设我们要创建一个确定公司员工薪水的系统,并考虑以下类别:

假设我们必须向所有类型的员工支付薪水,我们可以开始将公司的所有员工归为一个异构集合:

要管理员工工资,我们可以创建以下方法:

这使instanceof操作员可以测试多态参数emp所指向的类型,并相应地设置薪水。
现在,我们可以在一个foreach循环(具有180次迭代)中调用此方法,传递异构集合的所有元素,从而达到我们的目标:

对象投射
在前面的示例中,我们观察到instanceof操作员允许我们测试参考点指向哪种类型的实例。但是,我们已经知道,指向由子类实例化的对象的超类引用无法访问在子类中声明的成员。例如,假设程序员的薪水取决于经验的年限。在这种情况下,测试引用是否emp指向Programmer实例后,我们将需要访问yearsOfExperience变量。