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

Java新特性-record

Java 14 引入、15 预览、16 正式孵化的 record 是一种不可变的数据载体类(“数据类”)。它的设计目标就是:

用最少的代码,声明一个只存数据的透明载体。

record语法糖,编译器帮你自动生成:

  • 所有字段(private final

  • 全参构造器

  • 每个字段的 public 访问器(name()age()

  • equals / hashCode / toString(基于全部字段)

  • 实现 Serializable 等接口的便利

🆚 传统写法 vs record

传统 POJO
public final class Point {private final int x;private final int y;public Point(int x, int y) {this.x = x;this.y = y;}public int x() { return x; }public int y() { return y; }@Override public boolean equals(Object o) { ... }@Override public int hashCode() { ... }@Override public String toString() { ... }
}
record 写法
public record Point(int x, int y) {}

🔍 语法细节

1. 基本声明

java

public record User(long id, String name, LocalDate birth) {}
2. 可添加的额外成员
  • 可以定义静态字段 / 静态方法 / 实例方法

  • 可以定义紧凑构造器做参数校验

java

public record Range(int lo, int hi) {public Range {if (lo > hi) throw new IllegalArgumentException("lo > hi");}
}
  • 可以实现接口,但 不能继承类(隐式继承 java.lang.Record

  • 可以显式声明泛型

java

public record Pair<T, U>(T first, U second) {}

❗限制 & 注意

  • 所有字段都是 final,record 本身也是 final(不可被继承)。

  • 不能声明额外的实例字段,只能有头部声明的组件。

  • 序列化:虽然可 implements Serializable,但官方仍建议用普通类或 DTO。

  • 反射/序列化框架兼容性:Jackson、JPA 等已支持,但老版本需升级。

🧪 使用场景

场景示例
DTO / VOUserDTOApiResponse<T>
多返回值record Result<T>(T data, String error)
轻量级不可变元组record Coord(double lat, double lng)
Map 的复合 keyrecord Key(String type, long id)

✅ 与 Lombok 对比

特性recordLombok @Value
来源JDK 原生第三方库
不可变性强制可选
代码量最少需引入依赖
额外功能Builder、Wither 等
学习/维护成本需理解注解

🎉 结论

record 让 Java 拥有了原生、简洁、零依赖的“数据类”,特别适合不可变 DTO、值对象、多返回值等场景。

从 Java 16 起,放心在正式环境使用

http://www.xdnf.cn/news/16104.html

相关文章:

  • 力扣-139.单词拆分
  • js的基本内容:引用、变量、打印、交互、定时器、demo操作
  • 网络安全基础作业三
  • lspci/setpci用法小结
  • SpringBoot--Mapper XML 和 Mapper 接口在不同包
  • halcon手眼标定z方向实操矫正
  • [2025CVPR]ViKIENet:通过虚拟密钥实例增强网络实现高效的 3D 对象检测
  • React 项目性能优化概要
  • vs2017 c++ 使用sqlite3数据库
  • 基于Kubernetes的微服务CI/CD:Jenkins Pipeline全流程实践
  • 如何编译RustDesk(Unbuntu 和Android版本)
  • MongoDB数据库详解-针对大型分布式项目采用的原因以及基础原理和发展-卓伊凡|贝贝|莉莉
  • haproxy的负载均衡集群搭建
  • Rust实战:决策树与随机森林实现
  • 微博视觉算法面试30问全景精解
  • MDC(Mapped Diagnostic Context) 的核心介绍与使用教程
  • 【PTA数据结构 | C语言版】爱之匹配
  • 【C++】继承和多态扩展学习
  • 【上市公司变量测量】Python+FactSet Revere全球供应链数据库,测度供应链断裂与重构变量——丁浩员等(2024)《经济研究》复现
  • Docker从入门到精通
  • IPv4枯竭时代:从NAT技术到IPv6的演进之路
  • SpringBoot6-10(黑马)
  • git的版本冲突
  • 【未限制消息消费导致数据库CPU告警问题排查及解决方案】
  • Vue 分析脚手架
  • stm32内存分析
  • 传输层协议
  • 基于MySQL实现分布式调度系统的选举算法
  • C 语言的指针复习笔记
  • Pytorch版本、安装和检验