Record类强制要求全参构造器(参数顺序=字段声明顺序)和同名getter(无get前缀、无setter),以此显式建模纯数据载体,确保不可变性与契约明确性。

Record 类的全参构造器和 Getter 方法不是“可选功能”,而是语言层面强制约定的行为。理解它们的关键,在于抓住两个核心:字段即契约、访问即直取。
全参构造器:参数顺序 = 字段声明顺序
record 声明中列出的每个组件(如 String name, int age),会严格按此顺序生成且仅生成一个构造器。没有无参构造器,也没有单参数或部分参数的重载构造器。
- 编译器不会为你补任何构造器——哪怕只漏一个参数,代码就编译失败
- 字段顺序就是 API 合约:调用
new Person("张三", 25)是合法的;但new Person(25, "张三")会报错,因为类型和顺序不匹配 - 这个构造器自动完成 final 字段赋值,你不能在 record 主体里再写构造器逻辑(除非用 compact constructor 做轻量校验)
Getter 方法:名字 = 字段名,无 get 前缀
每个字段对应一个同名的 public 方法,返回该字段值,不带任何修饰(比如不是 getName(),而是 name())。
- 方法签名完全由字段类型决定:字段是
LocalDateTime time,getter 就是public LocalDateTime time() - 没有 setter,也不允许定义 setter——record 天然不可变,所有字段隐式 private final
- 你可以把
person.name()理解为“直接读取字段的受控通道”,语义比传统 getter 更贴近数据本质
为什么这样设计?不是为了偷懒,而是为了明确意图
Record 不是“简化版 class”,它是对“纯数据载体”这一用途的显式建模。全参构造器强制你一次性提供全部状态,Getter 去掉前缀让调用更扁平、更接近字段直觉——这两者共同传递一个信号:这个类型只负责承载、声明、比较、展示数据,不做行为封装。

















