代码对比
✕ Java 16
public record Person(String name,
List<String> pets) {
// Full canonical constructor
public Person(String name,
List<String> pets) {
Objects.requireNonNull(name);
this.name = name;
this.pets = List.copyOf(pets);
}
}
✓ Java 16+
public record Person(String name,
List<String> pets) {
// Compact constructor
public Person {
Objects.requireNonNull(name);
pets = List.copyOf(pets);
}
}
发现此代码有问题? 告诉我们。
为什么现代方式更好
减少重复
无需重复参数列表或手动赋值每个字段。
验证
非常适合 null 检查、范围验证和防御性复制。
意图更清晰
紧凑语法强调验证逻辑,而非样板代码。
旧方式
显式构造函数验证
现代方式
紧凑构造函数
自 JDK
16
难度
中级
JDK 支持
紧凑规范构造函数
可用
自 JDK 16 起广泛可用(2021 年 3 月)
工作原理
record 可以声明一个省略参数列表的紧凑规范构造函数。编译器在函数体执行后自动将所有参数赋值给对应字段。
相关文档