在 java 中,使用 record 类型可以显著简化数据封装,它自动处理构造函数、equals、hashcode 和 tostring 方法。只需声明类名和字段列表,即可创建不可变的数据载体,避免样板代码。

Record 生成的标准方法有哪些
record 默认生成包含所有组件的紧凑构造函数、访问器方法以及基于组件值的 equals、hashCode 和 toString。这些方法确保记录实例的相等性由字段值决定,而非引用地址。

public record User(String name, int age) {}
User u1 = new User("Alice", 30);
System.out.println(u1.name()); // Alice
System.out.println(u1); // User[name=Alice, age=30]上述代码定义了一个简单的用户记录。调用 name() 获取姓名,直接打印对象触发 toString,输出格式固定为 RecordName[field=value]。
立即学习“Java免费学习笔记(深入)”;
如何自定义 Record 的行为
可以通过添加静态块或实例初始化块来验证字段值或执行额外逻辑。自定义构造函数允许对参数进行预处理,但必须显式调用 this 并赋值给所有组件。

public record Point(int x, int y) {
public Point {
if (x < 0 || y < 0) {
throw new IllegalArgumentException("Coordinates must be non-negative");
}
}
}
Point p = new Point(10, 20);
// Point p2 = new Point(-1, 20); // 抛出异常此示例展示了如何在构造时校验坐标。若传入负数,将立即抛出 IllegalArgumentException,保证记录实例的有效性。
Record 在处理空值时的表现如何
当记录组件包含可空类型(如 String)时,equals 和 hashCode 会正常处理 null 值,不会抛出 NullPointerException。但若使用 var 推断或某些工具链,需注意编译期警告。


















