Record 记录类
Java 16 引入了 Record,用来简化不可变数据类的写法。以前写一个简单的数据类,需要手写一堆 getter、equals、hashCode、toString...
用 Record,一行搞定:
今天我们来把 Record 彻底讲透。
一、Record 的基本语法
1.1 声明 Record
1.2 自动生成的内容
声明 record Point(int x, int y) 后,编译器自动生成:
1.3 equals、hashCode、toString 示例
二、Compact Constructor
2.1 什么是 Compact Constructor
如果需要在构造方法中做验证或转换,可以使用 compact constructor:
2.2 完整构造方法 vs Compact
三、Record 的高级特性
3.1 添加方法
3.2 实现接口
3.3 添加静态字段
3.4 本地 Record
Record 可以写在方法内部:
3.5 Record 作为模式匹配
四、【直观类比】
【直观类比】
Record 就像一张"卡片":
五、Record vs 传统类 vs Lombok
5.1 对比表
5.2 为什么 Record 是不可变的
Record 的所有字段都是隐式 final 的。
5.3 Record 不支持继承
但 Record 可以实现接口:
六、生产避坑
6.1 ❌ 错误示范:Record 用于可变对象
6.2 ❌ 错误示范:Record 有太多职责
6.3 ✅ 正确示范:用 Record 做 DTO
七、面试追问链
第一层:基础概念
面试官问:"Record 是什么?"
Java 16 引入的语法糖,用来简化不可变数据类的写法。声明 record Point(int x, int y) 后,编译器自动生成构造方法、getter、equals、hashCode、toString。
第二层:特性
面试官问:"Record 和普通类有什么区别?"
Record 是隐式 final 的,所有字段都是 final 的,不能继承其他类但可以实现接口。可以添加方法、静态字段和静态方法。Compact constructor 可以在构造时做验证。
第三层:应用场景
面试官问:"什么时候用 Record?"
适合作为 DTO、API 响应、配置对象等纯数据传输对象。不适合有复杂业务逻辑或需要继承的场景。
【学习小结】
- Record 用
record关键字声明 - 自动生成 constructor、getter、equals、hashCode、toString
- 不可变:字段是 final 的
- 不能继承类,可以实现接口
- 适合做 DTO、API 响应、配置对象
- 支持模式匹配(Java 16+)