Java Record

林郁昇 Sean Lin 2021/05/06 11:11:27
1126

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記錄類將可以代替TuplePair等之前在JDK之外的工具庫提供的元組功能,或是不用再建立過多的DTO, 非常的實用

參考資料:

https://www.cnblogs.com/hollischuang/p/12529803.html

https://www.baeldung.com/java-record-keyword

 

林郁昇 Sean Lin
Colum Brolly
2021/05/06 11:51:23

Very cool, it's a nice feature of Java that helps cut the mundane task of writing boilerplate code for DTOs.