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

 更新时间:2026年03月17日 08:41:54   作者:老虎码农  
JDK14首次引入Record类作为预览特性,并在JDK16中正式发布,而JDK21进一步强化了Record模式匹配能力,这篇文章主要介绍了JDK21中Record用法全方位讲解的相关资料,需要的朋友可以参考下

前言

record 是 Java 16 正式引入的新语法,用来编写轻量级、只包含数据的不可变类。
到了 JDK 21,record 已经非常成熟,并且配合模式匹配(Pattern Matching)可以写出更简洁的代码。

本文将从基础语法、构造器、方法、自定义校验到 JDK21 新特性全方位讲解 record 的使用方式。

1. 什么是 Record?

record 用来创建 不可变数据类(data carrier class)

它会自动帮你生成:

  • private final 字段

  • 构造器

  • 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. 自动生成的内容

假设你写了:

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 的构造器用法

(1)规范构造器(Canonical Constructor)

你可以给 record 添加校验逻辑:

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

这是最常用的方式。

(2)额外构造器(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 中允许与不允许的内容

允许的内容

  • 定义方法

  • 定义静态字段、静态方法

  • 实现接口

  • 重写构造器

  • 使用注解

不允许的内容

  • 不能继承其他类(但可以实现接口)

  • 不能定义可变字段(如 int x;

  • 不能定义 setter

例如:

public record User(String name) {
    private int age; // ❌ 编译错误
}

7. Record 是否真的不可变?(深浅不可变问题)

record 提供的是浅不可变:字段本身是 final,但字段内部对象可以变。

例子:

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

Order o = new Order("1", new ArrayList<>(List.of("A", "B")));
o.items().add("C"); // ❗Allowed(内部 List 可以变)

如果你需要深不可变,可以在构造器里拷贝:

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

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

在 JDK21 中,你可以把 record 放进 sealed 层级结构:

public sealed interface Shape permits Circle, Rectangle { }

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

这让 record 特别适合建模领域对象(DDD)。

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

从 JDK 21 开始,switch 可以直接解构 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. 总结

能力是否支持
自动生成构造器、equals、hashCode、toString
字段不可变(final)
深不可变❌(需要自己处理)
实现接口
继承类
自定义构造器
模式匹配(JDK21)

Record 的核心价值:少写大量模板代码,写出更简洁、安全的数据类。

到此这篇关于JDK21中Record用法全方位讲解的文章就介绍到这了,更多相关JDK21中Record用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Spring Security 技术原理与实战全解析

    Spring Security 技术原理与实战全解析

    SpringSecurity是Spring生态的安全框架,提供认证、授权、攻击防护等功能,基于过滤器链和上下文模型,支持可插拔架构与声明式安全控制,适用于分布式和云原生场景,是Java应用安全的核心解决方案,本文给大家介绍Spring Security 原理实战,感兴趣的朋友一起看看吧
    2025-06-06
  • 浅谈Spring6中的反射机制

    浅谈Spring6中的反射机制

    Java反射机制是Java语言中一种动态(运行时)访问、检测、修改它本身的能力,主要作用是动态(运行时)获取类的完整结构信息、调用对象的方法,需要的朋友可以参考下
    2023-05-05
  • SpringBoot集成Watchdog的完整步骤教学

    SpringBoot集成Watchdog的完整步骤教学

    这篇文章主要为大家详细介绍了SpringBoot中集成Watchdog的完整步骤教学,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2025-09-09
  • MyBatis-Plus多数据源的示例代码

    MyBatis-Plus多数据源的示例代码

    本文主要介绍了MyBatis-Plus多数据源的示例代码,包括依赖配置、数据源配置、Mapper 和 Service 的定义,具有一定的参考价值,感兴趣的可以了解一下
    2024-05-05
  • SpringBoot项目集成Smart-Doc的实战指南

    SpringBoot项目集成Smart-Doc的实战指南

    Smart-Doc是一款强大的基于Java的API文档生成工具,它通过对接口源代码进行分析来生成全面而准确的文档,完全不需要对代码进行任何注入,下面我们看看如何在SpringBoot项目中集成Smart-Doc吧
    2025-10-10
  • Java踩坑记录之Arrays.AsList

    Java踩坑记录之Arrays.AsList

    这篇文章主要给大家介绍了关于Java踩坑记录之Arrays.AsList的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • springboot项目关闭swagger如何防止漏洞扫描

    springboot项目关闭swagger如何防止漏洞扫描

    这篇文章主要介绍了springboot项目关闭swagger如何防止漏洞扫描,本文通过示例代码给大家介绍的非常详细,感兴趣的朋友跟随小编一起看看吧
    2024-05-05
  • 2020年IntelliJ IDEA最新最详细配置图文教程详解

    2020年IntelliJ IDEA最新最详细配置图文教程详解

    这篇文章主要介绍了2020年IntelliJ IDEA最新最详细配置图文教程详解,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Springboot集成RabbitMQ并验证五种消息模型

    Springboot集成RabbitMQ并验证五种消息模型

    RabbitMQ 提供了5种常用消息模型,本文主要介绍了Springboot集成RabbitMQ并验证五种消息模型,具有一定的参考价值,感兴趣的可以了解一下
    2024-03-03
  • Java实现的RSA加密解密算法示例

    Java实现的RSA加密解密算法示例

    这篇文章主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了java RAS加密解密算法的相关实现技巧,需要的朋友可以参考下
    2018-01-01

最新评论