欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java?Record的實現(xiàn)示例

 更新時間:2025年04月29日 09:27:40   作者:禾小西  
本文主要介紹了Java?Record的實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

一、Record 的誕生背景

Java 的 Record(記錄類)是 Java 14 引入的預覽特性,于 Java 16 正式標準化。其設計初衷是簡化不可變數(shù)據(jù)類的定義,解決傳統(tǒng) POJO 類中大量樣板代碼(如構造器、getter、equals、hashCode、toString 等)的問題。例如,一個簡單的 Person 類在傳統(tǒng)寫法中需要 30+ 行代碼,而用 Record 只需一行。

傳統(tǒng)類 vs Record 類:

// 傳統(tǒng) POJO(30+ 行)
public class Person {
    private final int id;
    private final String name;
    // 構造器、getter、equals、hashCode、toString...
}

// Record 等效實現(xiàn)(1 行)
public record Person(int id, String name) {}

通過 Record,開發(fā)者可以專注于數(shù)據(jù)本身,而非重復的模板代碼。

二、Record 的核心特性

  • 不可變性

    • Record 的所有字段默認是 final 的,創(chuàng)建后不可修改,天然線程安全。
    • 適用于 DTO、配置項等需要數(shù)據(jù)一致性的場景。
  • 自動生成方法

    • 編譯器自動生成以下方法:
      • 全參構造器
      • 字段訪問器(如 id()、name(),而非 getId()
      • equals()、hashCode()、toString()。
  • 簡潔語法

    • 使用 record 關鍵字定義,語法緊湊:
      public record Point(int x, int y) {}
      
  • 限制性設計

    • Record 類是隱式 final 的,不可被繼承。
    • 不能聲明非靜態(tài)實例字段(僅允許通過參數(shù)列表定義字段)。

三、Record 的基本用法

1. 定義與實例化

public record User(String username, String email) {}

// 實例化
User user = new User("Alice", "alice@example.com");
System.out.println(user.username()); // 輸出 "Alice"

2. 自定義方法

Record 允許添加自定義方法:

public record Circle(double radius) {
    // 計算面積
    public double area() {
        return Math.PI * radius * radius;
    }
}

3. 參數(shù)校驗(緊湊構造器)

通過緊湊構造器實現(xiàn)字段校驗:

public record Email(String address) {
    public Email {
        if (!address.contains("@")) {
            throw new IllegalArgumentException("Invalid email");
        }
    }
}

4. 實現(xiàn)接口與泛型

Record 可以實現(xiàn)接口,支持泛型:

public record Pair<T, U>(T first, U second) implements Serializable {
    public String toJson() {
        return "{ \"first\": \"" + first + "\", \"second\": \"" + second + "\" }";
    }
}

四、Record 的進階應用

  • 替代 DTO/VO

    • 快速定義 API 響應模型:
      public record ApiResponse<T>(int code, String message, T data) {}
      
  • 模式匹配(Java 17+)

    • 結合 instanceof 解構數(shù)據(jù):
      Object obj = new Point(3, 4);
      if (obj instanceof Point(int x, int y)) {
          System.out.println("坐標: (" + x + ", " + y + ")");
      }
      
  • 數(shù)據(jù)庫映射

    • 簡化 JDBC 結果集處理:
      try (ResultSet rs = statement.executeQuery()) {
          return new User(rs.getInt("id"), rs.getString("name"));
      }
      
  • 函數(shù)式編程

    • 作為輕量級元組(如 Pair、Triple):
      record Pair<A, B>(A first, B second) {}
      List<Pair<String, Integer>> pairs = List.of(new Pair<>("Java", 1995));
      

五、Record 與 Lombok 的對比

特性RecordLombok
不可變性默認支持需手動添加 final
代碼生成語言原生支持依賴注解處理器
模式匹配完全兼容不支持
兼容性需 JDK 16+兼容舊版本
可變性不可變支持可變類(如 @Data

選擇建議:

  • 優(yōu)先 Record:需不可變類、使用模式匹配或 JDK 16+ 環(huán)境。
  • 選擇 Lombok:需可變類或兼容舊代碼。

六、注意事項

  • 不可繼承性

    • Record 不能繼承其他類(隱式繼承 java.lang.Record)。
  • 字段限制

    • 所有字段必須通過參數(shù)列表聲明,不支持動態(tài)添加實例字段。
  • 序列化

    • 需顯式實現(xiàn) Serializable 接口。
  • 框架兼容性

    • 部分框架(如舊版 Spring)可能需適配 Record 類型。

七、未來展望

  • 模式匹配增強:與 sealed class 結合,構建更嚴格的類型系統(tǒng)。
  • 框架整合:Spring 等框架或默認支持 Record 作為數(shù)據(jù)載體。
  • 函數(shù)式擴展:與 Stream、Optional 深度結合,提升代碼表現(xiàn)力。

總結

Java Record 通過極簡語法和不可變性,顯著減少了數(shù)據(jù)類的樣板代碼,同時提升了代碼安全性和可維護性。其適用于 DTO、模式匹配、函數(shù)式編程等場景。

到此這篇關于Java Record的實現(xiàn)示例的文章就介紹到這了,更多相關Java Record內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java Assert.assertEquals案例詳解

    Java Assert.assertEquals案例詳解

    這篇文章主要介紹了Java Assert.assertEquals案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-08-08
  • 詳解Spring cloud使用Ribbon進行Restful請求

    詳解Spring cloud使用Ribbon進行Restful請求

    這篇文章主要介紹了詳解Spring cloud使用Ribbon進行Restful請求,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • Spring實現(xiàn)內置監(jiān)聽器

    Spring實現(xiàn)內置監(jiān)聽器

    這篇文章主要介紹了Spring 實現(xiàn)自定義監(jiān)聽器案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧,希望能給你帶來幫助
    2021-07-07
  • Java 泛型實例詳解

    Java 泛型實例詳解

    本文主要介紹Java 泛型的知識,這里給代碼實例對Java 泛型深度理解,有需要的朋友可以看下
    2016-07-07
  • Maven的使用和配置國內源的保姆級教程

    Maven的使用和配置國內源的保姆級教程

    Maven是?個項目管理工具,基于POM(Project Object Model,項目對象模型)的概念,Maven可以通過一小段描述信息來管理項目的構建,報告和文檔的項目管理工具軟件,很多新手還不夠了解maven,所以本文給大家講解Maven的使用和配置,需要的朋友可以參考下
    2025-04-04
  • 基于@GetMapping注解攜帶參數(shù)的方式

    基于@GetMapping注解攜帶參數(shù)的方式

    這篇文章主要介紹了基于@GetMapping注解攜帶參數(shù)的方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-05-05
  • 解決日期轉化Json異常- Date JSON parse error

    解決日期轉化Json異常- Date JSON parse error

    這篇文章主要介紹了解決日期轉化Json異常- Date JSON parse error問題。具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Mybatis插件擴展及與Spring整合原理分析

    Mybatis插件擴展及與Spring整合原理分析

    這篇文章主要介紹了Mybatis插件擴展及與Spring整合原理,本文通過實例文字相結合給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-07-07
  • Java easyExcel實現(xiàn)導入多sheet的Excel

    Java easyExcel實現(xiàn)導入多sheet的Excel

    這篇文章主要為大家詳細介紹了如何使用Java easyExcel實現(xiàn)導入多sheet的Excel,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下
    2025-06-06
  • SpringMVC+MyBatis實現(xiàn)多數(shù)據(jù)源切換

    SpringMVC+MyBatis實現(xiàn)多數(shù)據(jù)源切換

    在企業(yè)級應用開發(fā)中,經常需要處理來自不同數(shù)據(jù)庫的數(shù)據(jù),為了滿足這一需求,我們可以通過配置多個數(shù)據(jù)源來實現(xiàn)對不同數(shù)據(jù)庫的訪問,下面我們來看看具體實現(xiàn)吧
    2025-01-01

最新評論