当前位置: 首页 > news >正文

Java Record 详解

Java Record 是 Java 14 引入的预览特性,在 Java 16 中正式成为标准特性。它是一种特殊类型的类,专门用于表示不可变的数据载体,旨在简化数据模型的创建。

Record 的核心特性

  1. 不可变性​:Record 的所有字段都是 final的,一旦创建就不能修改

  2. 自动生成方法​:编译器自动生成:

    • 规范构造方法(包含所有组件)

    • 访问器方法(字段名直接作为方法名)

    • equals()hashCode()方法

    • toString()方法

  3. 简洁语法​:大大减少样板代码

基本语法

public record RecordName(type1 component1, type2 component2, ...) {// 可选:自定义方法、静态字段等
}

示例:基本 Record

public record Person(String name, int age, String email) {}

这个简单的 Record 声明相当于以下传统类:

public final 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;}public String name() { return name; }public int age() { return age; }public String email() { return email; }@Overridepublic boolean equals(Object o) { /* 基于所有字段的equals实现 */ }@Overridepublic int hashCode() { /* 基于所有字段的hashCode实现 */ }@Overridepublic String toString() { /* 包含所有字段的字符串表示 */ }
}

使用 Record

public class RecordExample {public static void main(String[] args) {// 创建Record实例Person person = new Person("张三", 30, "zhangsan@example.com");// 访问字段(注意:方法名与字段名相同)System.out.println("姓名: " + person.name());System.out.println("年龄: " + person.age());System.out.println("邮箱: " + person.email());// 自动生成的toString()System.out.println(person); // 输出: Person[name=张三, age=30, email=zhangsan@example.com]// 自动生成的equals()和hashCode()Person samePerson = new Person("张三", 30, "zhangsan@example.com");System.out.println("是否相同: " + person.equals(samePerson)); // true}
}

自定义 Record

虽然 Record 自动生成方法,但你也可以自定义:

public record Person(String name, int age, String email) {// 自定义构造方法(紧凑形式)public Person {if (age < 0) {throw new IllegalArgumentException("年龄不能为负数");}// 不需要显式赋值,编译器会自动处理}// 自定义方法public String greeting() {return "你好,我是" + name + ",今年" + age + "岁";}// 静态方法public static Person createDefault() {return new Person("无名氏", 0, "无邮箱");}
}

Record 的限制

  1. 不能继承其他类(除了隐式继承 java.lang.Record

  2. 不能声明非静态字段

  3. 所有字段都是 final

  4. 不能声明为 abstract

  5. 不能扩展其他 Record

何时使用 Record

Record 最适合用于:

  • 数据传输对象(DTO)

  • 值对象(Value Objects)

  • 方法返回多个值

  • 临时数据容器

  • 任何需要简单、不可变数据结构的场景

Record 与传统类的对比

特性

Record

传统类

不可变性

强制

可选

样板代码

自动生成

手动编写

继承

不能继承其他类

可以继承

字段

所有字段都是 final

字段可变性可选

构造方法

自动生成

手动编写

toString/equals/hashCode

自动生成

手动编写

总结

Java Record 提供了一种简洁、安全的方式来表示不可变数据。它通过自动生成常用方法显著减少了样板代码,同时通过强制不可变性确保了数据安全。对于简单的数据载体类,Record 是比传统类更优雅的选择。

http://www.dtcms.com/a/524895.html

相关文章:

  • UVa 1635 Irrelevant Elements
  • 个人网站怎么做推广网站设计怎么收费
  • 做招聘网站需要多少钱网站建设需要工作计划
  • Java—继承
  • 开发网站需要什么硬件网站建设公司调研汇报ppt
  • SMDJ15CA双向TVS瞬态抑制二极管:15V双向电压SMC封装
  • 【基础复习2】过采样,欠采样与SMOTE:含代码示例
  • Spring/Spring Boot工程中Bean间歇性存在的问题
  • FactionTemplate.db2
  • AI 工具网站如何快速起量?一篇讲清新词、外链与选品逻辑
  • 坪洲网站建设惠济区建设局网站
  • UVa 13099 Tobby and the Line Game
  • bash的“进程替换 + 重定向”和“传统管道”
  • 4-ARM-PEG-Olefin(2)/Biotin(2),四臂聚乙二醇-烯烃/生物素多功能支链分子,多功能分子构建
  • 网站的建设与维护工资网站建设的原则有哪些内容
  • 日常推荐电脑小知识——1
  • 外贸网站建设及推广网站优化员seo招聘
  • PLM实施专家宝典:离散制造企业研发数据“数字基因”构建方案
  • 攻克 PCB 高低差字符检测痛点!维视自聚焦系统解锁电子制造智能新范式
  • 网站设计方案怎么写莱州人才网
  • 基于单片机的鱼缸监测与远程管理系统设计
  • ECSide标签<ec:table>表格对不齐问题处理
  • 南平住房和城乡建设部网站微信引流被加软件
  • 场馆预定系统小程序
  • Tauri 为什么仍未取代 Electron?
  • 个人网站做联盟营销网站集约化建设的优势
  • Nginx反向代理WebSocket配置笔记
  • 【数论】费马小定理
  • goland23.1自带dlv版本太低,使用新版dlv
  • 做外贸出口的网站企业免费做网站