精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Java 14發布了,不使用"class"也能定義類了?還順手要干掉Lombok!

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

[[319930]]

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

官方吐槽最為致命

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

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

那么,Brian Goetz 大神提到的純數據載體到底指的是什么呢。他舉了一個簡單的例子: 

  1. final class Point {  
  2.         public final int x;  
  3.         public final int y;   
  4.         public Point(int x, int y) {  
  5.             this.x = x;  
  6.             this.y = y;  
  7.         }   
  8.         // state-based implementations of equals, hashCode, toString  
  9.         // nothing else  
  10.     } 

這里面的Piont其實就是一個純數據載體,他表示一個"點"中包含x坐標和y坐標,并且只提供了構造函數,以及一些equals、hashCode等方法。

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

其實在其他的面向對象語言中,早就針對這種純數據載體有單獨的定義了,如Scala中的case、Kotlin中的data以及C#中的record。這些定義,盡管在語義上有所不同,但是它們的共同點是類的部分或全部狀態可以直接在類頭中描述,并且這個類中只包含了純數據而已。

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

  1. record Point(int x, int y) { } 

神說要用record,于是就有了

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

  •  toString()方法
  •  hashCode() and equals()方法
  •  Getter 方法
  •  一個共有的構造函數

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

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

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

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

一言不合反編譯

Records的用法比較簡單,和定義Java類一樣:  

  1. record Person (String firstName, String lastName) {}   

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

那么,這個東西看上去也是個語法糖,那他到底是怎么實現的那?

我們先嘗試對他進行編譯,記得使用--enable-preview參數,因為records功能目前在JDK 14中還是一個預覽(preview)功能。 

  1. javac --enable-preview --release 14 Person.java  
  2. Note: Person.java uses preview language features.  
  3. Note: Recompile with -Xlint:preview for details. 

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

  1. public final class Person extends java.lang.Record {  
  2.       private final String firstName; 
  3.        private final String lastName;  
  4.       public Person(java.lang.String, java.lang.String);  
  5.       public java.lang.String toString();  
  6.       public final int hashCode();  
  7.       public final boolean equals(java.lang.Object);  
  8.       public java.lang.String firstName();  
  9.       public java.lang.String lastName();  
  10.      }   

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

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

2、這個類繼承了java.lang.Record類,這個我們使用enum創建出來的枚舉都默認繼承java.lang.Enum有點類似

3、類中有兩個private final 類型的屬性。所以,record定義的類中的屬性都應該是private final類型的。

4、有一個public的構造函數,入參就是兩個主要的屬性。如果通過字節碼查看其方法體的話,其內容就是以下代碼,你一定很熟悉: 

  1. public Person(String firstName, String lastName) {  
  2.         this.firstName = firstName;  
  3.         this.lastName = lastName;  
  4.     }  

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

6、還幫我們自動生成了toString(), hashCode() 和 equals()方法。值得一提的是,這三個方法依賴invokedynamic來動態調用包含隱式實現的適當方法。

還可以這樣玩

前面的例子中,我們簡單的創建了一個record,那么,record中還能有其他的成員變量和方法嗎?我們來看下。

1、我們不能將實例字段添加到record中。但是,我們可以添加靜態字段。    

  1. record Person (String firstName, String lastName) {  
  2.         static int x;  
  3.     }   

2、我們可以定義靜態方法和實例方法,可以操作對象的狀態。  

  1. record Person (String firstName, String lastName) {  
  2.         static int x;     
  3.         public static void doX(){  
  4.             x++;  
  5.         }     
  6.         public String getFullName(){  
  7.             return firstName + " " + lastName;  
  8.         }  
  9.     } 

3、我們還可以添加構造函數。   

  1. record Person (String firstName, String lastName) {  
  2.         static int x;     
  3.         public Person{  
  4.             if(firstName == null){  
  5.                 throw new IllegalArgumentException( "firstName can not be null !");  
  6.             }  
  7.         }     
  8.         public Person(String fullName){  
  9.             this(fullName.split(" ")[0],this(fullName.split(" ")[1])  
  10.         }  
  11.     }   

所以,我們是可以在record中添加靜態字段/方法的,但是問題是,我們應該這么做嗎?

請記住,record推出背后的目標是使開發人員能夠將相關字段作為單個不可變數據項組合在一起,而不需要編寫冗長的代碼。這意味著,每當您想要向您的記錄添加更多的字段/方法時,請考慮是否應該使用完整的類來代替它。

總結

record 解決了使用類作為數據包裝器的一個常見問題。純數據類從幾行代碼顯著地簡化為一行代碼。

但是,record目前是一種預覽語言特性,這意味著,盡管它已經完全實現,但在JDK中還沒有標準化。

那么問題來了,如果你用上了Java 14之后,你還會使用Lombok嗎?哦不,你可能短時間內都用不上,因為你可能Java 8都還沒用熟~ 

 

責任編輯:龐桂玉 來源: Hollis
相關推薦

2020-12-28 13:43:03

MacWindowsSurface

2009-09-18 09:00:56

Ubuntu新版發布

2020-07-07 09:19:01

LombokJava IDE

2012-03-12 12:52:24

JavaDataNucleus

2018-03-30 09:44:14

iOS 11.3iPhone手機刷卡乘車

2022-05-07 08:23:57

KubernetesDockershim

2019-08-27 09:12:33

iOS 12.4.1漏洞越獄

2010-05-11 09:01:42

Fedora 14

2015-07-13 14:24:48

Kubernetes容器平臺Google

2018-09-06 12:20:22

瀏覽器ChromeChrome 69

2013-07-02 14:45:21

Foxmail 7.1郵件

2019-05-09 10:43:12

微軟蘋果谷歌

2025-04-15 08:50:01

DeepSeek模型AI

2021-07-26 22:23:17

Windows 11Windows微軟

2021-12-17 10:42:39

MozillaWindows瀏覽器

2012-05-30 10:24:56

Fedora 18

2017-12-20 21:12:04

2009-06-16 09:50:16

JS.Class 2.

2011-12-21 08:58:23

Java
點贊
收藏

51CTO技術棧公眾號

波多野结衣一区| 男女视频在线| 日本欧美一区二区在线观看| 中文字幕亚洲无线码a| 国产又大又黄又粗又爽| av毛片在线免费看| 91麻豆精东视频| 国产精品视频不卡| 精品少妇theporn| 久久99性xxx老妇胖精品| 欧美另类一区二区三区| 精品无码一区二区三区爱欲| 久草在现在线| 国产精品亚洲午夜一区二区三区| 欧美一级夜夜爽| 国产毛片久久久久久国产毛片| 99精品视频免费看| 亚洲一区久久| 久久99热这里只有精品国产| 色噜噜日韩精品欧美一区二区| 99thz桃花论族在线播放| 国产三级三级三级精品8ⅰ区| 欧美一级bbbbb性bbbb喷潮片| aaa黄色大片| 成人涩涩视频| 亚洲午夜影视影院在线观看| 亚洲欧美综合一区| 午夜成人鲁丝片午夜精品| 九九视频精品免费| 国产91在线播放九色快色| 久久久久人妻一区精品色欧美| 激情视频亚洲| 欧美影片第一页| 男人操女人免费软件| 成全电影大全在线观看| 亚洲免费av在线| 亚洲精品永久www嫩草| 日本a一级在线免费播放| 成人激情文学综合网| 亚洲一区亚洲二区| 国产情侣一区二区| 免费观看成人av| 国产成人精品免高潮费视频| 国产免费av一区二区| 国产精品地址| 九九九久久国产免费| 成年人二级毛片| 久久在线视频| xxx欧美精品| fc2ppv在线播放| 国产高清一区| 久热精品在线视频| 亚洲综合网在线| 国产精品观看| 久久久伊人日本| 日韩熟女精品一区二区三区| 亚洲三级电影在线观看| 久久久久免费精品国产| 美女毛片在线观看| 91精品天堂福利在线观看| 中文字幕亚洲一区二区三区五十路 | 亚洲免费视频播放| 波多野结衣一区二区| 久久夜色精品一区| 国产一区二区三区免费不卡| www.av网站| 国产成人综合在线播放| 亚洲影院色在线观看免费| 国产精品玖玖玖| 国产一区二区三区在线观看精品| 亚洲欧美国产va在线影院| 青娱乐国产精品视频| 国产成人精品一区二区三区视频 | 第四色在线视频| 外国电影一区二区| 91国产福利在线| 人妻丰满熟妇av无码区app| xxxxx性欧美特大| 色激情天天射综合网| 91看片就是不一样| 成人网ww555视频免费看| 日韩欧美国产一区二区| 91人人澡人人爽人人精品| 日本午夜免费一区二区| 日韩一区二区三区四区五区六区| 精品中文字幕av| 美女高潮视频在线看| 色欲综合视频天天天| 欧美第一页浮力影院| 国产精久久久| 亚洲高清色综合| 国产三级av在线播放| 久久精品免费一区二区三区| 欧美国产日韩xxxxx| 国产精品xxxx喷水欧美| 久久婷婷一区| 成人天堂噜噜噜| 国产超碰人人模人人爽人人添| 美女mm1313爽爽久久久蜜臀| 日韩av免费在线| 夜夜躁很很躁日日躁麻豆| 国产曰批免费观看久久久| 国产精品中出一区二区三区| 国产在线黄色| 亚洲老司机在线| 日韩av黄色网址| 久久91视频| 欧美精品一区二区三区高清aⅴ | 色乱码一区二区三区熟女| 青春草在线免费视频| 欧美性xxxx| 亚洲成人手机在线观看| 四虎5151久久欧美毛片| www.精品av.com| 日韩毛片在线视频| 麻豆91小视频| 国产日韩精品久久| 免费在线看黄色| 亚洲免费观看高清完整版在线| 天堂精品一区二区三区| 国产原创精品视频| 日韩欧美国产骚| 亚洲精品在线网址| 国产亚洲电影| 国模叶桐国产精品一区| 亚洲无码久久久久久久| 国产二区国产一区在线观看| 日韩视频专区| 草草视频在线| 制服丝袜成人动漫| 久久av无码精品人妻系列试探| 欧美**字幕| 欧美日韩国产成人在线| 色婷婷久久综合中文久久蜜桃av| 香蕉久久夜色精品| aa成人免费视频| 九七久久人人| 欧美日韩一区二区在线视频| 欧美深性狂猛ⅹxxx深喉| 综合一区av| 国产美女扒开尿口久久久| 欧美日韩在线中文字幕| 亚洲一区二区成人在线观看| 最新国产黄色网址| av影片在线一区| 日本韩国欧美精品大片卡二| 污视频网站在线播放| 亚洲成人在线观看视频| 日本55丰满熟妇厨房伦| 天天天综合网| 成人福利在线视频| 在线观看免费网站黄| 色94色欧美sute亚洲线路一ni| 国产精品wwwww| 亚洲精品观看| 色综合久久久888| 亚洲天天综合网| 日韩一区在线免费观看| 污污的视频免费观看| 久久亚洲专区| 成人淫片在线看| 黄色网址在线免费| 91精品福利在线一区二区三区| 在线观看亚洲免费视频| 午夜日韩激情| 99久久综合狠狠综合久久止| 91麻豆国产福利在线观看宅福利| 一区二区三区四区中文字幕| 成年人免费在线播放| 久操国产精品| 国产精品国产三级国产aⅴ浪潮| av天堂一区二区三区| 亚洲精品免费看| 无码人妻一区二区三区免费n鬼沢| 欧美大片网址| 97免费在线视频| 五月婷婷综合久久| 在线亚洲免费视频| 欧美日韩国产黄色| 国产在线精品一区二区| 懂色av粉嫩av蜜臀av| 日韩免费高清视频网站| 欧美激情视频在线免费观看 欧美视频免费一 | 成人深夜在线观看| 日本中文字幕网址| 婷婷五月色综合香五月| 国产精品久久久久久久久影视| 日韩在线视频观看免费| 狠狠干狠狠久久| 欧美波霸videosex极品| 国产一区二三区好的| 日韩中文字幕在线免费| 久久动漫网址| 国产精品第七影院| 97超碰资源站在线观看| 日韩av影视综合网| 中文字幕+乱码+中文字幕明步| 懂色av中文字幕一区二区三区 | 日本成人黄色片| aⅴ在线视频男人的天堂 | 亚洲新声在线观看| 国产精品女人久久久| 亚洲成av人片在线| 人妻少妇精品视频一区二区三区| 欧美午夜在线视频| 免费国产在线精品一区二区三区| 岛国毛片av在线| 亚洲欧美日韩视频一区| 91精东传媒理伦片在线观看| 亚洲高清在线精品| 欧美性猛交xxxx乱大交少妇| 粉嫩蜜臀av国产精品网站| 午夜两性免费视频| 亚洲国产高清视频| 夜夜爽99久久国产综合精品女不卡 | 99re在线观看| 日日av拍夜夜添久久免费| 粗暴蹂躏中文一区二区三区| 人人九九精品| 精品精品欲导航| 亚洲一卡二卡在线观看| 精品久久久久久中文字幕一区奶水| 日韩av无码一区二区三区不卡| 海角社区69精品视频| 日韩理论片在线观看| 成人线上播放| 91久久精品在线| 欧美影视资讯| 55夜色66夜色国产精品视频| 午夜伦理在线| 亚洲美女久久久| 丰满熟妇乱又伦| 91精品国产乱| 亚洲成人第一网站| 欧美日韩在线一区| 国产一级性生活| 亚洲激情一二三区| 免费精品在线视频| 欧美国产日本韩| 成人免费网站黄| av一区二区三区在线| 精产国品一二三区| 久99久精品视频免费观看| 精品日韩久久久| 日韩制服丝袜av| 波多野结衣家庭教师视频| 亚洲激情亚洲| 国产日本欧美在线| 欧美日韩亚洲一区在线观看| 最近免费观看高清韩国日本大全| 91麻豆精品激情在线观看最新| 久久人人爽人人爽人人片av高请| 亚洲av成人精品日韩在线播放| 色欧美片视频在线观看| 日韩精品无码一区二区| 亚洲成人免费在线| 国产一级片免费观看| 亚洲一区二区三区在线播放 | 国产精品77777| 日韩欧美亚洲另类| 国产精品123| 亚洲少妇中文字幕| 成人深夜在线观看| 日韩av一二区| 久久午夜电影网| 精品人伦一区二区三电影| 久久女同性恋中文字幕| 国产中年熟女高潮大集合| 99久久99久久精品免费看蜜桃| 亚洲欧美激情网| 老司机免费视频一区二区| 日日噜噜噜噜久久久精品毛片| 亚洲第一网站| 日韩在线综合网| 国产午夜精品一区二区三区欧美 | 国产精品福利在线| 少妇一区视频| 国产精品揄拍一区二区| 电影一区中文字幕| 成人综合电影| 欧美男男gaytwinkfreevideos| 亚洲一区二区免费在线| 日韩在线视频一区二区三区| 国产成人成网站在线播放青青| 色8久久影院午夜场| 国产精品亚洲аv天堂网| av在线精品| 国产一区二区三区黄| 教室别恋欧美无删减版| 亚洲黄色一区二区三区| 激情av一区| 免费激情视频在线观看| 国产伦精品一区二区三区免费迷| 男人透女人免费视频| 久久aⅴ国产欧美74aaa| 久久久久99人妻一区二区三区| 奇米精品一区二区三区四区| 一级黄色片在线免费观看| 狠狠色丁香婷婷综合久久片| 扒开伸进免费视频| 国产亚洲欧美一级| 91视频综合网| 岛国视频午夜一区免费在线观看| 国产成人亚洲精品自产在线| 欧美性色欧美a在线播放| 国产强被迫伦姧在线观看无码| 欧美午夜电影在线播放| aaaa一级片| 亚洲九九九在线观看| 日本激情在线观看| 69久久夜色精品国产7777| 欧美激情福利| 国内一区二区在线视频观看| 久久在线播放| 哪个网站能看毛片| 国产精品影视天天线| av男人的天堂av| 亚洲图片欧美视频| 国产美女www| 日韩美女在线视频| 美女写真理伦片在线看| 日本国产精品视频| 亚洲一区二区三区中文字幕在线观看 | 亚洲自拍偷拍福利| 婷婷亚洲成人| 国产精品一色哟哟| 久久99久久99| 日韩精品久久久久久久的张开腿让 | 亚洲免费在线观看| 啪啪小视频网站| 精品调教chinesegay| 99视频免费在线观看| 国产精品日日摸夜夜添夜夜av| 欧美综合影院| 久久久精品动漫| 亚洲一级特黄| 日本一级大毛片a一| 亚洲人成网站影音先锋播放| 波多野结衣电车| 亚洲国产精品久久久久久| av在线app| 国产一区私人高清影院| 欧州一区二区| 男人舔女人下面高潮视频| 久久久午夜精品理论片中文字幕| 亚洲色成人网站www永久四虎 | 男男做爰猛烈叫床爽爽小说| 中文字幕一区二区三区精华液| 免费在线观看黄视频| 91麻豆精品国产自产在线观看一区| av网站在线免费看| 精品国偷自产在线视频| 桃色一区二区| 黄色91av| 国产欧美高清| 亚洲国产无码精品| 色综合中文字幕| 久香视频在线观看| 国产99视频精品免视看7| 欧美成a人免费观看久久| 日本黄网站免费| 久久精品无码一区二区三区| 国产免费一级视频| 亚洲色图激情小说| 日韩欧美一区二区三区免费观看| 亚洲一区二区三区乱码aⅴ| 99久久影视| 久久久久亚洲av片无码v| 亚洲国产精品一区二区www在线| 久久久久久亚洲av无码专区| 亚洲天堂网在线观看| 成人免费黄色| 亚洲黄色网址在线观看| 国产精品亚洲人在线观看| xxxx 国产| 日韩精品999| 粉嫩一区二区三区| 亚洲精品一区二区三区av| 久久国产麻豆精品| 久久中文免费视频| 亚洲国产欧美一区| 播放一区二区| 欧美最大成人综合网| 日韩二区在线观看| 老司机成人免费视频| 精品国产伦一区二区三区观看方式| 成人性爱视频在线观看| 成人国产在线视频| 午夜国产精品视频免费体验区| 99热手机在线| 国产精品初高中害羞小美女文| 在线观看 亚洲| 播播国产欧美激情| 日韩精品久久久久久久软件91| 日韩欧美国产二区| 国产一区二区三区精品视频| 日本三级网站在线观看| 亚洲欧洲日产国码av系列天堂| 人人草在线视频| 亚洲欧美日韩不卡|