欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java21新特性Record?Patterns示例詳解

 更新時(shí)間:2023年09月22日 10:02:24   作者:程序猿DD  
這篇文章主要為大家介紹了Java21新特性Record?Patterns示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

Record Patterns

Record Patterns 第一次發(fā)布預(yù)覽是在JDK 19、隨后又在JDK 20中進(jìn)行了完善?,F(xiàn)在,Java 21開(kāi)始正式推出該特性優(yōu)化。下面我們通過(guò)一個(gè)例子來(lái)理解這個(gè)新特性。

record Point(int x, int y) {}
static void printSum(Object obj) {
    if (obj instanceof Point p) {
        int x = p.x();
        int y = p.y();
        System.out.println(x+y);
    }
}

上述代碼中定義了一個(gè)名為Point的record類(Java 16中的新特性),如果我們想要獲取、操作或者打印Point中的x和y的話。就不得不先完成類型判斷和類型轉(zhuǎn)換。所以,這里為了實(shí)現(xiàn)x+y總共需要4行代碼。而在Java 21之后,只需要2行代碼就能完成:

static void printSum(Object obj) {
    if (obj instanceof Point(int x, int y)) {
        System.out.println(x+y);
    }
}

可以看到,類型判斷、類型轉(zhuǎn)換、record值的結(jié)構(gòu)都一氣呵成了,所以代碼量得到了簡(jiǎn)化。

嵌套record的解構(gòu)

假設(shè)有下面一組嵌套的record結(jié)構(gòu)(WindowFrame中包含了PointSize):

record Size(int width, int height) { }
record Point(int x, int y) { }
record WindowFrame(Point origin, Size size) { }

這個(gè)時(shí)候,如果想要訪問(wèn)WindowFrameSize的height,根據(jù)之前案例的理解,我們可以這樣寫:

if (obj instanceof WindowFrame wf) {
  if (wf.size() != null) {
    System.out.println("Height: " + wf.size().height());
  }
}

好像也沒(méi)有很簡(jiǎn)單,但實(shí)際上還有更簡(jiǎn)單的寫法,因?yàn)閞ecord的解構(gòu)是可以嵌套的,直接這樣一步完成即可:

if (obj instanceof WindowFrame(Point origin, Size(int width, int height))) {
    System.out.println("Height: " + height);
}

是不是一下感受到這個(gè)新特性的強(qiáng)大了?

以上就是Java21新特性Record Patterns的詳細(xì)內(nèi)容,更多關(guān)于Java Record Patterns的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Maven的使用之繼承與聚合

    Maven的使用之繼承與聚合

    這篇文章主要為大家詳細(xì)介紹了Maven的繼承和聚合,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2023-04-04
  • 詳解MybatisPlus中@Version注解的使用

    詳解MybatisPlus中@Version注解的使用

    在MyBatisPlus中,常常使用@Version實(shí)現(xiàn)樂(lè)觀鎖,該注解用于字段上面。本文將通過(guò)示例詳細(xì)講解@Version注解的使用,感興趣的可以了解一下
    2022-06-06
  • SpringBoot中使用tkMapper的方法詳解

    SpringBoot中使用tkMapper的方法詳解

    這篇文章主要介紹了SpringBoot中使用tkMapper的方法詳解
    2022-11-11
  • C#中NAudio音頻庫(kù)的安裝與使用教程詳解

    C#中NAudio音頻庫(kù)的安裝與使用教程詳解

    NAudio為.NET平臺(tái)下的開(kāi)源庫(kù),采用ML-PL協(xié)議,它支持許多音頻操作,可實(shí)現(xiàn)多種API播放與錄制、多種不同音頻格式等功能,下面就跟隨小編一起學(xué)習(xí)一下NAudio的安裝與使用吧
    2023-11-11
  • Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    Spring 使用注解方式進(jìn)行事務(wù)管理配置方式

    本篇文章主要介紹了Spring 使用注解方式進(jìn)行事務(wù)管理配置方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java?CopyOnWriteArrayList源碼超詳細(xì)分析

    Java?CopyOnWriteArrayList源碼超詳細(xì)分析

    為了將讀取的性能發(fā)揮到極致,jdk中提供了CopyOnWriteArrayList類,下面這篇文章主要給大家介紹了關(guān)于java中CopyOnWriteArrayList源碼解析的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • Java中finalize()詳解及用法

    Java中finalize()詳解及用法

    這篇文章主要介紹了Java中finalize()詳解及用法的相關(guān)資料,final是Java的關(guān)鍵字,它所表示的是“這部分是無(wú)法修改的”,需要的朋友可以參考下
    2017-03-03
  • Java面試題沖刺第十八天--Spring框架3

    Java面試題沖刺第十八天--Spring框架3

    這篇文章主要為大家分享了最有價(jià)值的三道關(guān)于Spring框架的面試題,涵蓋內(nèi)容全面,包括數(shù)據(jù)結(jié)構(gòu)和算法相關(guān)的題目、經(jīng)典面試編程題等,感興趣的小伙伴們可以參考一下
    2021-08-08
  • Java實(shí)戰(zhàn)之圖書管理系統(tǒng)的實(shí)現(xiàn)

    Java實(shí)戰(zhàn)之圖書管理系統(tǒng)的實(shí)現(xiàn)

    這篇文章主要介紹了如何利用Java語(yǔ)言編寫一個(gè)圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下
    2022-03-03
  • Java使用Random類生成隨機(jī)數(shù)示例

    Java使用Random類生成隨機(jī)數(shù)示例

    這篇文章主要介紹了Java使用Random類生成隨機(jī)數(shù),結(jié)合實(shí)例形式分析了java基于Random類生成隨機(jī)數(shù)與遍歷輸出相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07

最新評(píng)論