引言:数据载体类的演进困境
在Java开发中,我们经常需要编写只用于承载数据的类,例如DTO、VO等。传统方式下,这类"数据载体类"需要大量样板代码:
public final class Person {
private final String name;
private final int age;
public Person(String name, int age) {
this.name = name;
this.age = age;
}
// getters
public String name() { return name; }
public int age() { return age; }
// toString, equals, hashCode
@Override
public String toString() {
return "Person[name=" + name + ", age=" + age + "]";
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Person)) return false;
Person person = (Person)o;
return age == person.age && name.equals(person.name);
}
@Override
public int hashCode() {
return Objects.hash(name, age);
}
}
这种模式存在三大痛点:
-
代码冗长:简单数据类需要大量样板代码
-
维护困难:修改字段需要同步修改多个方法
-
意图模糊:类的设计意图被样板代码淹没
Java 14引入的记录类(Records)正是为了解决这些问题。
记录类的核心特性
1. 声明式语法
用一行代码替代传统类的所有样板代码:
public record Person(String name, int age) {}
编译器会自动生成: