Java16新特性record類使用細(xì)節(jié)示例詳解
引言
以前我們定義類都是用class關(guān)鍵詞,但從Java 16開始,我們將多一個(gè)關(guān)鍵詞record,它也可以用來定義類。record關(guān)鍵詞的引入,主要是為了提供一種更為簡(jiǎ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類詳解
在知道了如何申明之后,你一定會(huì)想用record申明的就那么點(diǎn)元素,它到底會(huì)具備什么能力呢?
因?yàn)?code>record關(guān)鍵詞申明類主要是為了簡(jiǎn)化一些類的申明,所以它本質(zhì)就是一類特殊的class,或者說是某一個(gè)模版的class。
record申明的類,具備這些特點(diǎn):
- 它是一個(gè)
final類 - 自動(dòng)實(shí)現(xiàn)
equals、hashCode、toString函數(shù) - 成員變量均為
public屬性
所以,對(duì)于之前寫的range類,它等價(jià)于一個(gè)這樣的類:
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定義的時(shí)候,我們看不到,所以我們可以嘗試寫這樣一段測(cè)試代碼來驗(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類的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Spring-AOP自動(dòng)創(chuàng)建代理之BeanNameAutoProxyCreator實(shí)例
這篇文章主要介紹了Spring-AOP自動(dòng)創(chuàng)建代理之BeanNameAutoProxyCreator實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07
詳解Java中方法next()和nextLine()的區(qū)別與易錯(cuò)點(diǎn)
這篇文章主要介紹了詳解Java中方法next()和nextLine()的區(qū)別與易錯(cuò)點(diǎn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
在SpringBoot項(xiàng)目中使用Spring Cloud Sentinel實(shí)現(xiàn)流量控制
隨著微服務(wù)架構(gòu)的流行,服務(wù)之間的調(diào)用變得越來越頻繁和復(fù)雜,流量控制是保障系統(tǒng)穩(wěn)定性的重要手段之一,它可以幫助我們避免因過載而導(dǎo)致的服務(wù)不可用,本文將介紹如何在Spring Boot項(xiàng)目中使用Spring Cloud Sentinel來實(shí)現(xiàn)流量控制,需要的朋友可以參考下2024-08-08
springboot?注解方式批量插入數(shù)據(jù)的實(shí)現(xiàn)
一次請(qǐng)求需要往數(shù)據(jù)庫插入多條數(shù)據(jù)時(shí),可以節(jié)省大量時(shí)間,本文主要介紹了springboot?注解方式批量插入數(shù)據(jù),文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-03-03
Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn)記錄
這篇文章主要介紹了Spring?Cloud?中自定義外部化擴(kuò)展機(jī)制原理及實(shí)戰(zhàn),本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù)
這篇文章主要介紹了Jmeter命令行執(zhí)行腳本如何設(shè)置動(dòng)態(tài)參數(shù),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08
SpringBoot+Elasticsearch實(shí)現(xiàn)數(shù)據(jù)搜索的方法詳解
Elasticsearch是一個(gè)基于Lucene的搜索服務(wù)器。它提供了一個(gè)分布式多用戶能力的全文搜索引擎,基于RESTful?web接口。本文將利用SpringBoot整合Elasticsearch實(shí)現(xiàn)海量級(jí)數(shù)據(jù)搜索,需要的可以參考一下2022-05-05
java并發(fā)編程synchronized底層實(shí)現(xiàn)原理
這篇文章主要介紹了java并發(fā)編程synchronized底層實(shí)現(xiàn)原理2022-02-02
java中jdbcTemplate的queryForList(坑)
本文主要介紹了java中jdbcTemplate的queryForList,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09

