Java Record
Java Record
前言
從JDK 14開始提供了Record記錄類的預覽特性,這一特性將成為JDK 16的一項永久性特性。Record記錄類作為不可變資料的透明載體,其是為了回應有關Java過於冗長拘謹的抱怨。此計畫的目標包括設計一個表示簡單值集合的物件導向的構造函數,説明開發人員專注于對不可變資料的建模而不是擴展行為,自動實現資料驅動的方法(例如 equals() 和 屬性的訪問器)。
通過較新版IDEA可以創建此類型:
聲明Record記錄類後,幾乎不需要添加額外的代碼,一組隱式聲明讓其代碼書寫很簡潔:
1.隱式聲明了屬性
2.隱式聲明了構造器
3.隱式聲明了equals()、hashCode()、toString()
4.隱式聲明了屬性的訪問器,訪問器名稱與屬性同名
一、版本選擇
或是直接使用最新的16版
二、測試資料
假設資料表欄位:
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person{
private Integer id;
private String name;
private Integer score;
}
假設資料集:
List<Person> personList = new ArrayList<>();
personList.add(new Person(1,"小明", 50));
personList.add(new Person(2,"小華", 80));
personList.add(new Person(3,"阿信", 100));
三、宣告Record
Record記錄類支援Local Classes特性,那麼當需要臨時使用Record的時候,就可以非常方便的定義與使用:
注意第一行的宣告方式
record Score(String name, int score){}
List<Score> newList = personList.stream()
.map(x-> new Score(x.getName(),x.getScore()))
.collect(Collectors.toList());
已聲明了toString()方法, 不用自己覆寫
newList.forEach(score -> System.out.println(score.toString()));
取屬性是直接名稱,而不是以往的getXXX()
小結:
Record記錄類將可以代替Tuple、Pair等之前在JDK之外的工具庫提供的元組功能,或是不用再建立過多的DTO, 非常的實用
參考資料:
https://www.cnblogs.com/hollischuang/p/12529803.html
https://www.baeldung.com/java-record-keyword
Very cool, it's a nice feature of Java that helps cut the mundane task of writing boilerplate code for DTOs.