Java16新特性record類使用細(xì)節(jié)示例詳解
引言
以前我們定義類都是用class
關(guān)鍵詞,但從Java 16開始,我們將多一個關(guān)鍵詞record
,它也可以用來定義類。record
關(guān)鍵詞的引入,主要是為了提供一種更為簡潔、緊湊的final
類的定義方式。
下面就來具體了解record類的細(xì)節(jié)。
聲明record類
聲明record類的基礎(chǔ)語法:
record range(int start, int end){}
我們知道class類可以在單獨(dú)文件中生命,也可以在其他類中申明。那么record類也一樣,它有這幾種申明方式:
- 單獨(dú)文件申明:
public record range(int start, int end){}
- 在類內(nèi)部申明:
public class DidispaceTest { public record range(int start, int end){} }
- 函數(shù)內(nèi)申明:
public class DidispaceTest { public void test() { public record range(int start, int end){} } }
record類詳解
在知道了如何申明之后,你一定會想用record
申明的就那么點(diǎn)元素,它到底會具備什么能力呢?
因?yàn)?code>record關(guān)鍵詞申明類主要是為了簡化一些類的申明,所以它本質(zhì)就是一類特殊的class,或者說是某一個模版的class。
record
申明的類,具備這些特點(diǎn):
- 它是一個
final
類 - 自動實(shí)現(xiàn)
equals
、hashCode
、toString
函數(shù) - 成員變量均為
public
屬性
所以,對于之前寫的range類,它等價于一個這樣的類:
public final class range{ final int start; final int end; public range(int start, int end) { this.start = start; this.end = end; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; range range = (range) o; return start == range.start && end == range.end; } @Override public int hashCode() { return Objects.hash(start, end); } @Override public String toString() { return "range{" + "start=" + x + ", end=" + y + '}'; } public int start(){ return start; } public int end(){ return end; } }
因?yàn)橐恍┖瘮?shù)是隱藏的,在range定義的時候,我們看不到,所以我們可以嘗試寫這樣一段測試代碼來驗(yàn)證一下:
@Test public void test() { range r = new range(100, 200); log.info(r.toString()); range r2 = new range(100, 200); log.info(String.valueOf(r.equals(r2))); }
定義成員函數(shù)
因?yàn)?code>record申明的本質(zhì)也是類,那么定義成員函數(shù)肯定也是可以的。
比如,我們可以這樣在record
類中定義成員函數(shù):
record range(int start, int end){ int distance(){ return end - start; } }
然后,就可以這樣調(diào)用它:
range r = new range(100, 200); r.distance();
視頻地址:https://www.bilibili.com/video/BV1vY4y1b71m/
以上就是Java16新特性record類使用細(xì)節(jié)示例詳解的詳細(xì)內(nèi)容,更多關(guān)于Java16新特性record類的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解IDEA多module項(xiàng)目maven依賴的一些說明
這篇文章主要介紹了詳解IDEA多module項(xiàng)目maven依賴的一些說明,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-10-10Java后臺接收數(shù)據(jù)的三種方式(url、form-data與application/json)
本文主要介紹了Java后臺接收數(shù)據(jù)的三種方式(url、form-data與application/json),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-07-07Java中反射的"暴破"機(jī)制(SetAccessible方法)詳解
這篇文章主要為大家詳細(xì)介紹了Java中反射的"暴破"機(jī)制,以及如何利用這一機(jī)制實(shí)現(xiàn)訪問非公有屬性,方法,和構(gòu)造器,文中示例代碼講解詳細(xì),感興趣的可以了解一下2022-08-08解決spring boot hibernate 懶加載的問題
這篇文章主要介紹了解決spring boot hibernate 懶加載的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-10-10java中VO PO DTO POJO BO DO對象的應(yīng)用場景及使用
文章介紹了Java開發(fā)中常用的幾種對象類型及其應(yīng)用場景,包括VO、PO、DTO、POJO、BO和DO等,并通過示例說明了它們在不同場景下的應(yīng)用2025-01-01