在Java 14中作为预览功能引入并在Java 16中正式发布的记录类型(Record),旨在提供一种简洁的语法来声明不可变的数据载体类。
传统的Java类为了封装数据,需要编写大量的样板代码:私有final字段、全参构造函数、getter方法、以及toString()
、equals()
和hashCode()
方法。虽然IDE可以生成这些代码,但它们仍然会使代码变得冗长且难以阅读。
记录类型解决了这个问题。您可以使用一行代码定义一个完整的不可变数据类:
public record Person(String name, int age) {
}
编译器会自动为我们生成:
- 私有final字段(
name
和age
) - 一个规范的构造函数
- 访问器方法(
name()
和age()
,注意不是传统的getName()
) toString()
、equals()
和hashCode()
方法
核心优势:
- 简洁性:极大减少了样板代码,使意图更加清晰。
- 不可变性:记录中的字段是隐式
final
的,保证了实例的不可变,这在并发编程中更安全。 - 透明性:Record明确表示其只是一个数据载体,而非具有复杂行为的类。
记录类型非常适合在DTO、返回多个值的场景以及任何需要简单聚合数据的地方使用,是Java迈向更现代语言风格的重要一步。