记录更新(Java数据类)
最近幾個月,有一些與“ Java數據類”(又稱為“記錄”)有關的更新。 正如我在“ JavaFX,Valhalla,數據類和Java的浮點更新 ”一文中簡短提到的那樣, Brian Goetz的“ Java數據類 ”“探討了Java語言中數據類的可能方向?!?令人遺憾的是,盡管在OpenJDK郵件列表上對這一潛在的新Java功能進行了廣泛的討論,但該文檔還指出:“這只是一個探索性文檔,并不構成Java語言任何特定版本中任何特定功能的計劃?!?
3月中旬,Goetz在琥珀色專家郵件列表中發(fā)布了一條消息,標題為“ 記錄-當前狀態(tài)” 。 他在該消息中指出了Java記錄的意圖:“我們一直以來的目標是將記錄定義為一組更細粒度的功能的'純宏'。 其中一些是由樣板驅動的。 有些是由語義(將API元素的語義耦合到狀態(tài))驅動的。通常,記錄將首先到達那里,然后普通的類將具有更通用的功能?!?
“ 記錄-當前狀態(tài) ”一文中提出了一些有趣的觀點,但在這里我將重點介紹一些我發(fā)現特別有趣的觀點。 通常,在陳述的早期設計決策中可以看到,與創(chuàng)建Java相比,現在普遍流行的通用原則主導著與記錄有關的思維。
在“可變性和可訪問性”部分中,Goetz建議Java記錄提供final字段,這些字段是“默認情況下為打包( protected抽象記錄protected )的軟件包”,但允許開發(fā)人員“明確選擇退出(非最終)”,因為并允許“明確擴展(公開)訪問范圍”。 我喜歡的有Java結構的想法final默認領域,并具有明確選擇,使他們非final ,而不是周圍的其他方式,我們已經成為在Java中使用。
Goetz在“訪問器”部分中寫道,當前的想法是讓這些訪問器方法不使用JavaBeans的“ get”約定,而使用不帶“ get”前綴的字段名稱。 他寫道:“顯而易見的選擇是自動公開讀取訪問器。 (這些將不會被命名為getXxx;無論人們已經考慮了多少,我們都不會將不明智的Javabean命名約定燒入該語言。)這些訪問器的明顯命名選擇是fieldName()?!?我喜歡遵循此簡單命名約定(在編寫builder時傾向于使用)自動生成的讀取訪問器的想法。 我還贊賞強調的保證,即沒有陰謀或努力將“不明智的JavaBean命名約定燒入該語言中”。
Goetz的“核心方法”部分討論了諸如equals(Object) , hashCode() , toString()等通用方法。 Goetz寫道:“記錄將獲得equals,hashCode和toString”,并且“將equals / hashCode最終定為一個好參數?!?他補充說,雖然無需將toString()為final方法,但可以將自動生成的讀取訪問器方法設置為final 。
Stephen Colebourne在有關Java中的記錄/數據類的郵件列表討論中貢獻了多個帖子。 這些包括他在Amber上發(fā)表的見解 (該項目包括這項工作以及其他工作,例如LVTI和原始字符串文字 )以及對先前提到的原始“ Records-current status ”消息的回應 。
關于Java記錄的其他相對較新的郵件列表消息包括Goetz的“ 記錄:構造和驗證” ,由Remi Forax發(fā)起的“ 記錄和注釋值 ”討論,以及由Gunnar Morling發(fā)起的名為“ Records- 將它們用作JPA實體”的主題。并使用Bean驗證對其進行驗證 ?!?
盡管Records / Data Classs尚未與任何特定的Java版本相關聯(lián),但令人激動的是,思考它們可能帶來的使更好,更安全和可讀性更好的Java代碼的可能性。
翻譯自: https://www.javacodegeeks.com/2018/05/updates-on-records-data-classes-for-java.html
總結
以上是生活随笔為你收集整理的记录更新(Java数据类)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 卸载linuxjdk(卸载linux j
- 下一篇: eclipse创建pojo_使用Ecli