日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!...

發(fā)布時(shí)間:2025/3/12 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2020年3月17日發(fā)布,Java正式發(fā)布了JDK 14 ,目前已經(jīng)可以開放下載。在JDK 14中,共有16個(gè)新特性,本文主要來介紹其中的一個(gè)特性:JEP 359: Records

官方吐槽最為致命

早在2019年2月份,Java 語言架構(gòu)師 Brian Goetz,曾經(jīng)寫過一篇文章(http://cr.openjdk.java.net/~briangoetz/amber/datum.html ),詳盡的說明了并吐槽了Java語言,他和很多程序員一樣抱怨“Java太啰嗦”或有太多的“繁文縟節(jié)”,他提到:開發(fā)人員想要?jiǎng)?chuàng)建純數(shù)據(jù)載體類(plain data carriers)通常都必須編寫大量低價(jià)值、重復(fù)的、容易出錯(cuò)的代碼。如:構(gòu)造函數(shù)、getter/setter、equals()、hashCode()以及toString()等。

以至于很多人選擇使用IDE的功能來自動(dòng)生成這些代碼。還有一些開發(fā)會(huì)選擇使用一些第三方類庫(kù),如Lombok等來生成這些方法,從而會(huì)導(dǎo)致了令人吃驚的表現(xiàn)(surprising behavior)和糟糕的可調(diào)試性(poor debuggability)。

那么,Brian Goetz 大神提到的純數(shù)據(jù)載體到底指的是什么呢。他舉了一個(gè)簡(jiǎn)單的例子:

final

這里面的Piont其實(shí)就是一個(gè)純數(shù)據(jù)載體,他表示一個(gè)"點(diǎn)"中包含x坐標(biāo)和y坐標(biāo),并且只提供了構(gòu)造函數(shù),以及一些equals、hashCode等方法。

于是,BrianGoetz大神提出一種想法,他提到,Java完全可以對(duì)于這種純數(shù)據(jù)載體通過另外一種方式表示。

其實(shí)在其他的面向?qū)ο笳Z言中,早就針對(duì)這種純數(shù)據(jù)載體有單獨(dú)的定義了,如Scala中的case、Kotlin中的data以及C#中的record。這些定義,盡管在語義上有所不同,但是它們的共同點(diǎn)是類的部分或全部狀態(tài)可以直接在類頭中描述,并且這個(gè)類中只包含了純數(shù)據(jù)而已。

于是,他提出Java中是不是也可以通過如下方式定義一個(gè)純數(shù)據(jù)載體呢?

record Point(int x, int y) { }

神說要用record,于是就有了

就像大神吐槽的那樣,我們通常需要編寫大量代碼才能使類變得有用。如以下內(nèi)容:

  • toString()方法

  • hashCode() and equals()方法

  • Getter 方法

  • 一個(gè)共有的構(gòu)造函數(shù)

對(duì)于這種簡(jiǎn)單的類,這些方法通常是無聊的、重復(fù)的,而且是可以很容易地機(jī)械地生成的那種東西(ide通常提供這種功能)。

當(dāng)你閱讀別人的代碼時(shí),可能會(huì)更加頭大。例如,別人可能使用IDE生成的hashCode()和equals()來處理類的所有字段,但是如何才能在不檢查實(shí)現(xiàn)的每一行的情況下確定他寫的對(duì)呢?如果在重構(gòu)過程中添加了字段而沒有重新生成方法,會(huì)發(fā)生什么情況呢?

大神Brian Goetz提出了使用record定義一個(gè)純數(shù)據(jù)載體的想法,于是,Java 14 中便包含了一個(gè)新特性:EP 359: Records ,作者正是 Brian Goetz

Records的目標(biāo)是擴(kuò)展Java語言語法,Records為聲明類提供了一種緊湊的語法,用于創(chuàng)建一種類中是“字段,只是字段,除了字段什么都沒有”的類。通過對(duì)類做這樣的聲明,編譯器可以通過自動(dòng)創(chuàng)建所有方法并讓所有字段參與hashCode()等方法。這是JDK 14中的一個(gè)預(yù)覽特性。

一言不合反編譯

Records的用法比較簡(jiǎn)單,和定義Java類一樣:

record Person (String firstName, String lastName) {}

如上,我們定義了一個(gè)Person記錄,其中包含兩個(gè)組件:firstName和lastName,以及一個(gè)空的類體。

那么,這個(gè)東西看上去也是個(gè)語法糖,那他到底是怎么實(shí)現(xiàn)的那?

我們先嘗試對(duì)他進(jìn)行編譯,記得使用--enable-preview參數(shù),因?yàn)閞ecords功能目前在JDK 14中還是一個(gè)預(yù)覽(preview)功能。

14 Person.java

如前所述,Record只是一個(gè)類,其目的是保存和公開數(shù)據(jù)。讓我們看看用javap進(jìn)行反編譯,將會(huì)得到以下代碼:

public

通過反編譯得到的類,我們可以得到以下信息:

1、生成了一個(gè)final類型的Person類(class),說明這個(gè)類不能再有子類了。

2、這個(gè)類繼承了java.lang.Record類,這個(gè)我們使用enum創(chuàng)建出來的枚舉都默認(rèn)繼承java.lang.Enum有點(diǎn)類似

3、類中有兩個(gè)private final 類型的屬性。所以,record定義的類中的屬性都應(yīng)該是private final類型的。

4、有一個(gè)public的構(gòu)造函數(shù),入?yún)⒕褪莾蓚€(gè)主要的屬性。如果通過字節(jié)碼查看其方法體的話,其內(nèi)容就是以下代碼,你一定很熟悉:

public Person(String firstName, String lastName) {

5、有兩個(gè)getter方法,分別叫做firstName和lastName。這和JavaBean中定義的命名方式有區(qū)別,或許大神想通過這種方式告訴我們r(jià)ecord定義出來的并不是一個(gè)JavaBean吧。

6、還幫我們自動(dòng)生成了toString(), hashCode() 和 equals()方法。值得一提的是,這三個(gè)方法依賴invokedynamic來動(dòng)態(tài)調(diào)用包含隱式實(shí)現(xiàn)的適當(dāng)方法。

還可以這樣玩

前面的例子中,我們簡(jiǎn)單的創(chuàng)建了一個(gè)record,那么,record中還能有其他的成員變量和方法嗎?我們來看下。

1、我們不能將實(shí)例字段添加到record中。但是,我們可以添加靜態(tài)字段。

record Person (String firstName, String lastName) {

2、我們可以定義靜態(tài)方法和實(shí)例方法,可以操作對(duì)象的狀態(tài)。

record Person (String firstName, String lastName) {

3、我們還可以添加構(gòu)造函數(shù)。

record Person (String firstName, String lastName) {

所以,我們是可以在record中添加靜態(tài)字段/方法的,但是問題是,我們應(yīng)該這么做嗎?

請(qǐng)記住,record推出背后的目標(biāo)是使開發(fā)人員能夠?qū)⑾嚓P(guān)字段作為單個(gè)不可變數(shù)據(jù)項(xiàng)組合在一起,而不需要編寫冗長(zhǎng)的代碼。這意味著,每當(dāng)您想要向您的記錄添加更多的字段/方法時(shí),請(qǐng)考慮是否應(yīng)該使用完整的類來代替它。

總結(jié)

record 解決了使用類作為數(shù)據(jù)包裝器的一個(gè)常見問題。純數(shù)據(jù)類從幾行代碼顯著地簡(jiǎn)化為一行代碼。

但是,record目前是一種預(yù)覽語言特性,這意味著,盡管它已經(jīng)完全實(shí)現(xiàn),但在JDK中還沒有標(biāo)準(zhǔn)化。

那么問題來了,如果你用上了Java 14之后,你還會(huì)使用Lombok嗎?哦不,你可能短時(shí)間內(nèi)都用不上,因?yàn)槟憧赡躂ava 8都還沒用熟~

PS:最近Java 14發(fā)布了很多新功能,很多特性還是比較有意思的,這個(gè)是本系列的第一篇文章,歡迎大家關(guān)注公眾號(hào):Java之道,后續(xù)文章寫好后會(huì)第一時(shí)間發(fā)出。

參考資料:

https://openjdk.java.net/jeps/359

https://dzone.com/articles/a-first-look-at-records-in-java-14

https://aboullaite.me/java-14-records/

http://cr.openjdk.java.net/~briangoetz/amber/datum.html

關(guān)于作者:Hollis,一個(gè)對(duì)Coding有著獨(dú)特追求的人,現(xiàn)任阿里巴巴技術(shù)專家,個(gè)人技術(shù)博主,技術(shù)文章全網(wǎng)閱讀量數(shù)千萬,《程序員的三門課》聯(lián)合作者。

推薦閱讀:

接口默認(rèn)方法是什么鬼

HTTPS 的 7 次握手以及 9 倍時(shí)延

Java堆內(nèi)存是線程共享的!面試官:你確定嗎?

2020年3月全國(guó)程序員工資統(tǒng)計(jì),平均工資13820元

喜歡我可以給我設(shè)為星標(biāo)哦

好文章,我?在看?

總結(jié)

以上是生活随笔為你收集整理的djano 字段不重复_Java 14 发布了,不使用quot;classquot;也能定义类了?还顺手要干掉Lombok!...的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 中文字幕第一页在线 | 在线播放波多野结衣 | 色综合九九 | 国产精品com | 国产精品18久久久久久久久 | 丝袜调教91porn | 久久99网站 | 亚洲欧美一区二区三区久久 | 日韩综合精品 | 成人免费视频播放 | 黄色片视频播放 | 无遮挡毛片 | 日韩精品一区二区三区免费视频 | 调教丰满的已婚少妇在线观看 | 91成品视频 | 精品人妻一区二区三区在线视频 | 视频黄页在线观看 | 黄色网战大全 | 国产wwwwwww | 视频一区二区中文字幕 | 91高跟黑色丝袜呻吟在线观看 | 国内老熟妇对白xxxxhd | 欧美日韩一二区 | 亚洲一区二区观看播放 | 亚洲欧美亚洲 | 成人a区 | 欧美一级α片 | 亚洲经典三级 | 综合激情网站 | 在线视频观看一区 | 亚洲AV无码精品久久一区二区 | 精品久久久久久无码人妻 | wwwxx日本 | 日本欧美激情 | 丝袜人妻一区二区 | 韩日一区二区 | 波多野结衣在线观看一区二区 | 黑人添美女bbb添高潮了 | 国产精品麻豆视频 | 欧美黄色片视频 | 欧美性猛交ⅹxx | 91抖音在线观看 | 无遮挡裸光屁屁打屁股男男 | 国产999精品视频 | 成人综合网址 | 91免费视频国产 | 成人做爰69片免费看 | 亚洲欧美亚洲 | 伊人青青久久 | 91精品国产亚洲 | 久久综合热 | 色中色综合网 | 国产男女自拍 | 波多野结衣高清视频 | 国产乱淫av片杨贵妃 | 无码任你躁久久久久久老妇 | 日本三级视频网站 | 日本少妇bbwbbw精品 | 亚洲欧美国产一区二区 | 欧美一区在线看 | 毛茸茸日本熟妇高潮 | 免费毛片看 | japanese21ⅹxx日本| 性一交一乱一伧国产女士spa | 日本wwwwwww| 国产swag在线观看 | 国产在线天堂 | 日韩一区二区三区在线看 | 中文av资源| av集中营| 亚洲a黄| 日韩视频h | 黄色精彩视频 | 黄色工厂这里只有精品 | 亚洲激情视频在线播放 | 丁香六月啪啪 | 亚洲 欧美 激情 另类 | 男女视频久久 | 打屁股调教网站 | 亚洲成人精品久久 | 国产东北露脸精品视频 | 欧美日韩国产中文 | 国精产品一二三区精华液 | 欧美日韩在线免费播放 | 精品黄色片 | 青青草国产成人av片免费 | 成人午夜激情视频 | av一区二区在线观看 | 日韩精品一区二区亚洲av性色 | 一区在线播放 | 一边摸上面一边摸下面 | 蜜桃麻豆视频 | 国产这里只有精品 | 国内成人在线 | 京香julia在线观看 | 欧美精品福利视频 | 日韩欧美国产激情 | 这里只有精品国产 | 午夜成人免费影院 |