最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JDK21中Record的用法全方位講解(附完整示例)

 更新時間:2026年03月17日 08:41:54   作者:老虎碼農(nóng)  
JDK14首次引入Record類作為預(yù)覽特性,并在JDK16中正式發(fā)布,而JDK21進一步強化了Record模式匹配能力,這篇文章主要介紹了JDK21中Record用法全方位講解的相關(guān)資料,需要的朋友可以參考下

前言

record 是 Java 16 正式引入的新語法,用來編寫輕量級、只包含數(shù)據(jù)的不可變類。
到了 JDK 21,record 已經(jīng)非常成熟,并且配合模式匹配(Pattern Matching)可以寫出更簡潔的代碼。

本文將從基礎(chǔ)語法、構(gòu)造器、方法、自定義校驗到 JDK21 新特性全方位講解 record 的使用方式。

1. 什么是 Record?

record 用來創(chuàng)建 不可變數(shù)據(jù)類(data carrier class)。

它會自動幫你生成:

  • private final 字段

  • 構(gòu)造器

  • equals()

  • hashCode()

  • toString()

  • getter(無前綴,方法名就是字段名)

2. Record 的基本使用

public record User(String name, int age) { }

使用方式:

User u = new User("Alice", 20);
System.out.println(u.name()); // Alice
System.out.println(u.age());  // 20

3. 自動生成的內(nèi)容

假設(shè)你寫了:

public record User(String name, int age) { }

Java 會自動生成等價于:

private final String name;
private final int age;

public User(String name, int age) { ... }

public String name() { return name; }
public int age() { return age; }

public boolean equals(Object o) { ... }
public int hashCode() { ... }
public String toString() { ... }

你完全不需要自己寫!

4. Record 的構(gòu)造器用法

(1)規(guī)范構(gòu)造器(Canonical Constructor)

你可以給 record 添加校驗邏輯:

public record User(String name, int age) {
    public User {
        if (age < 0) {
            throw new IllegalArgumentException("age must be >= 0");
        }
    }
}

這是最常用的方式。

(2)額外構(gòu)造器(Overloaded Constructor)

public record Point(int x, int y) {
    public Point(int value) {
        this(value, value);
    }
}

5. 在 Record 中定義方法

record 和普通類一樣可以添加方法:

public record User(String name, int age) {
    public String info() {
        return name + " (" + age + ")";
    }
}

6. Record 中允許與不允許的內(nèi)容

允許的內(nèi)容

  • 定義方法

  • 定義靜態(tài)字段、靜態(tài)方法

  • 實現(xiàn)接口

  • 重寫構(gòu)造器

  • 使用注解

不允許的內(nèi)容

  • 不能繼承其他類(但可以實現(xiàn)接口)

  • 不能定義可變字段(如 int x;

  • 不能定義 setter

例如:

public record User(String name) {
    private int age; // ? 編譯錯誤
}

7. Record 是否真的不可變?(深淺不可變問題)

record 提供的是淺不可變:字段本身是 final,但字段內(nèi)部對象可以變。

例子:

public record Order(String id, List<String> items) { }

Order o = new Order("1", new ArrayList<>(List.of("A", "B")));
o.items().add("C"); // ?Allowed(內(nèi)部 List 可以變)

如果你需要深不可變,可以在構(gòu)造器里拷貝:

public record Order(String id, List<String> items) {
    public Order {
        items = List.copyOf(items);
    }
}

8. Record 搭配 sealed(JDK21 完整支持)

在 JDK21 中,你可以把 record 放進 sealed 層級結(jié)構(gòu):

public sealed interface Shape permits Circle, Rectangle { }

public record Circle(double r) implements Shape { }
public record Rectangle(double w, double h) implements Shape { }

這讓 record 特別適合建模領(lǐng)域?qū)ο螅―DD)。

9. Record 模式匹配(Pattern Matching)→ JDK21 新特性

從 JDK 21 開始,switch 可以直接解構(gòu) record:

record Point(int x, int y) {}

static String format(Object o) {
    return switch (o) {
        case Point(int x, int y) -> "Point: " + x + "," + y;
        default -> "Unknown";
    };
}

這讓 record 使用起來更像 Kotlin 的 data class。

10. 總結(jié)

能力是否支持
自動生成構(gòu)造器、equals、hashCode、toString?
字段不可變(final)?
深不可變?(需要自己處理)
實現(xiàn)接口?
繼承類?
自定義構(gòu)造器?
模式匹配(JDK21)?

Record 的核心價值:少寫大量模板代碼,寫出更簡潔、安全的數(shù)據(jù)類。

到此這篇關(guān)于JDK21中Record用法全方位講解的文章就介紹到這了,更多相關(guān)JDK21中Record用法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Spring Security 技術(shù)原理與實戰(zhàn)全解析

    Spring Security 技術(shù)原理與實戰(zhàn)全解析

    SpringSecurity是Spring生態(tài)的安全框架,提供認(rèn)證、授權(quán)、攻擊防護等功能,基于過濾器鏈和上下文模型,支持可插拔架構(gòu)與聲明式安全控制,適用于分布式和云原生場景,是Java應(yīng)用安全的核心解決方案,本文給大家介紹Spring Security 原理實戰(zhàn),感興趣的朋友一起看看吧
    2025-06-06
  • 淺談Spring6中的反射機制

    淺談Spring6中的反射機制

    Java反射機制是Java語言中一種動態(tài)(運行時)訪問、檢測、修改它本身的能力,主要作用是動態(tài)(運行時)獲取類的完整結(jié)構(gòu)信息、調(diào)用對象的方法,需要的朋友可以參考下
    2023-05-05
  • SpringBoot集成Watchdog的完整步驟教學(xué)

    SpringBoot集成Watchdog的完整步驟教學(xué)

    這篇文章主要為大家詳細介紹了SpringBoot中集成Watchdog的完整步驟教學(xué),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-09-09
  • MyBatis-Plus多數(shù)據(jù)源的示例代碼

    MyBatis-Plus多數(shù)據(jù)源的示例代碼

    本文主要介紹了MyBatis-Plus多數(shù)據(jù)源的示例代碼,包括依賴配置、數(shù)據(jù)源配置、Mapper 和 Service 的定義,具有一定的參考價值,感興趣的可以了解一下
    2024-05-05
  • SpringBoot項目集成Smart-Doc的實戰(zhàn)指南

    SpringBoot項目集成Smart-Doc的實戰(zhàn)指南

    Smart-Doc是一款強大的基于Java的API文檔生成工具,它通過對接口源代碼進行分析來生成全面而準(zhǔn)確的文檔,完全不需要對代碼進行任何注入,下面我們看看如何在SpringBoot項目中集成Smart-Doc吧
    2025-10-10
  • Java踩坑記錄之Arrays.AsList

    Java踩坑記錄之Arrays.AsList

    這篇文章主要給大家介紹了關(guān)于Java踩坑記錄之Arrays.AsList的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • springboot項目關(guān)閉swagger如何防止漏洞掃描

    springboot項目關(guān)閉swagger如何防止漏洞掃描

    這篇文章主要介紹了springboot項目關(guān)閉swagger如何防止漏洞掃描,本文通過示例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • 2020年IntelliJ IDEA最新最詳細配置圖文教程詳解

    2020年IntelliJ IDEA最新最詳細配置圖文教程詳解

    這篇文章主要介紹了2020年IntelliJ IDEA最新最詳細配置圖文教程詳解,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-02-02
  • Springboot集成RabbitMQ并驗證五種消息模型

    Springboot集成RabbitMQ并驗證五種消息模型

    RabbitMQ 提供了5種常用消息模型,本文主要介紹了Springboot集成RabbitMQ并驗證五種消息模型,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • Java實現(xiàn)的RSA加密解密算法示例

    Java實現(xiàn)的RSA加密解密算法示例

    這篇文章主要介紹了Java實現(xiàn)的RSA加密解密算法,結(jié)合實例形式分析了java RAS加密解密算法的相關(guān)實現(xiàn)技巧,需要的朋友可以參考下
    2018-01-01

最新評論

蚌埠市| 山东| 阿克陶县| 神池县| 大渡口区| 忻城县| 昌吉市| 原阳县| 襄樊市| 江达县| 霍城县| 乌拉特后旗| 龙口市| 吉木乃县| 清丰县| 泸西县| 新昌县| 临潭县| 通山县| 黔东| 滕州市| 阳原县| 武鸣县| 安图县| 平谷区| 绥中县| 沙湾县| 吐鲁番市| 仲巴县| 微博| 铜鼓县| 漯河市| 云和县| 镇安县| 兴海县| 栾川县| 池州市| 堆龙德庆县| 特克斯县| 获嘉县| 林西县|