目录
[1. record 关键字是什么](#1. record 关键字是什么)
[2. 它解决了什么问题?](#2. 它解决了什么问题?)
[3. 对比示例](#3. 对比示例)
[4. record 自动生成什么?](#4. record 自动生成什么?)
[5. record 的核心特点](#5. record 的核心特点)
[6. 最常用场景](#6. 最常用场景)
[✅ 接口返回值](#✅ 接口返回值)
[✅ 方法返回多个值](#✅ 方法返回多个值)
[✅ 数据查询封装](#✅ 数据查询封装)
1. record 关键字是什么
record 是 Java 16+ 正式推出的关键字,用来快速创建一个「只读、极简、只用来存数据」的类。
它的作用:自动生成模板代码,不用写 getter、toString、equals、hashCode
2. 它解决了什么问题?
以前我们写一个只存数据、没有业务逻辑的类(比如 UserDTO、ApiResponse、ChunkInfo),必须写:
- private final 字段
- 构造方法
- getter
- equals()
- hashCode()
- toString()
代码又长又重复!
而 record 就是干掉这些重复代码的语法糖
3. 对比示例
1)传统 Java 类
java
public class User {
private final Long id;
private final String name;
public User(Long id, String name) {
this.id = id;
this.name = name;
}
public Long id() { // record 会自动生成这个,不是 getId()
return id;
}
public String name() {
return name;
}
// equals、hashCode、toString 也要自己写
}
2)使用 record
java
public record User(Long id, String name) {}
上面这一行 = 上面传统 Java 类的全部功能
4. record 自动生成什么?
- private final 成员变量
- 构造方法(全参)
- 访问方法 :
id()、name()(注意,不是 getId ()) - equals() + hashCode()(按字段比较)
- toString()(自动打印所有字段)
5. record 的核心特点
- 不可变类(字段都是 private final)
- 不能继承其他类
- 不能被继承
- 不能额外声明实例字段
- 非常适合做:DTO、VO、返回值、参数、数据载体
6. 最常用场景
✅ 接口返回值
java
public record ApiResponse(int code, String msg, Object data) {}
✅ 方法返回多个值
java
public record UploadResult(String url, long size) {}
✅ 数据查询封装
java
public record FileInfo(String md5, String name, long size) {}