亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

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開發工程師
手記
粉絲
3858
獲贊與收藏
1468

關注作者,訂閱最新文章

閱讀免費教程

  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消