Java21新特性Record?Patterns示例詳解
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
中包含了Point
和Size
):
record Size(int width, int height) { } record Point(int x, int y) { } record WindowFrame(Point origin, Size size) { }
這個(gè)時(shí)候,如果想要訪問(wèn)WindowFrame
中Size
的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)文章
Spring 使用注解方式進(jìn)行事務(wù)管理配置方式
本篇文章主要介紹了Spring 使用注解方式進(jìn)行事務(wù)管理配置方式,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-04-04Java?CopyOnWriteArrayList源碼超詳細(xì)分析
為了將讀取的性能發(fā)揮到極致,jdk中提供了CopyOnWriteArrayList類,下面這篇文章主要給大家介紹了關(guān)于java中CopyOnWriteArrayList源碼解析的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-11-11Java實(shí)戰(zhàn)之圖書管理系統(tǒng)的實(shí)現(xiàn)
這篇文章主要介紹了如何利用Java語(yǔ)言編寫一個(gè)圖書管理系統(tǒng),文中采用的技術(shù)有Springboot、SpringMVC、MyBatis、ThymeLeaf 等,需要的可以參考一下2022-03-03