## Java新特性速览:记录类(Record)如何简化你的代码
什么是Record类?
Record类是Java 14中作为预览功能引入、在Java 16中正式成为标准特性的新特性。它是一种特殊的类,专门用于存储不可变数据,旨在简化数据载体的编写。Record通过简洁的语法自动实现数据类所需的方法,如构造方法、getter、equals()、hashCode()和toString()。
Record类的优势
Record类的主要优势在于大大减少了样板代码。在传统Java中,创建一个简单数据类需要编写大量重复代码:私有final字段、参数化构造函数、getter方法以及equals()、hashCode()和toString()方法。而使用Record,所有这些都可以通过一行声明自动生成。
Record类的基本语法
Record类的声明非常简单,使用record关键字后跟类名和组件列表:
public record Person(String name, int age, String email) {}这行代码会自动生成:
- 所有字段的final私有字段
- 规范构造函数
- 每个组件的访问器方法(如name()、age()、email())
- equals()、hashCode()和toString()方法
Record类与传统Java类的对比
以下是一个传统Java类与Record类的对比示例:
传统Java类实现:
public class Person { private final String name; private final int age; private final String email; public Person(String name, int age, String email) { this.name = name; this.age = age; this.email = email; } // Getters, equals(), hashCode(), toString()... // 通常需要40+行代码}使用Record实现相同功能:
public record Person(String name, int age, String email) {}只需一行代码即可实现相同的功能,大大减少了代码量。
Record类的自定义方法
虽然Record类自动生成了许多方法,但我们仍然可以添加自定义方法:
public record Person(String name, int age, String email) { public boolean isAdult() { return age >= 18; } public String nameInUpperCase() { return name.toUpperCase(); }}Record类的限制
Record类有一些限制需要注意:
- Record类隐式继承自java.lang.Record,不能再继承其他类
- 所有字段都是final的,因此Record实例是不可变的
- 不能声明实例字段(只能在声明中定义的组件字段)
- 不能声明native方法
Record类的适用场景
Record类最适合以下场景:
- DTO(数据传输对象)
- 方法返回多个值
- 存储简单的键值对数据
- 任何需要简单、不可变数据容器的场景
使用Record类可以让代码更加简洁、易读,同时减少出错的可能性,因为自动生成的方法确保了行为的一致性。
2万+

被折叠的 条评论
为什么被折叠?



