Java中Record的应用小结
Record是Java 14引入的预览特性(Java 16正式发布),主要用于简化不可变数据载体的建模。其核心价值在于自动生成模板代码,替代传统POJO类的繁琐编写。
一、核心特性
自动生成方法
编译器自动生成:final字段的getter(方法名即字段名,无get前缀)equals()和hashCode()toString()- 全字段构造器
不可变性
所有字段默认为final,创建后状态不可修改。语法结构
public record 类名(类型1 字段1, 类型2 字段2...) { // 可选:自定义方法/构造器 }
二、典型应用场景
DTO数据传输对象
public record UserDTO(String id, String name, LocalDateTime createTime) {}多返回值方法
替代Map或临时类:public record Coordinate(double x, double y) {} public Coordinate calculatePosition() { return new Coordinate(12.5, 8.3); }模式匹配(Java 17+)
配合instanceof简化类型判断:Object obj = new UserDTO("U001", "Alice", LocalDateTime.now()); if (obj instanceof UserDTO(String id, String name, var time)) { System.out.println(name); // 直接解构字段 }
三、与传统类对比
| 特性 | Record类 | 传统POJO类 |
|---|---|---|
| 字段声明 | 直接在括号内声明 | 显式声明+getter/setter |
| 不可变性 | 默认强制 | 需手动添加final |
| 代码量 | 平均减少70%模板代码 | 冗长 |
| 继承 | 隐式继承Record,不可继承其他类 | 可自由继承 |
| 可变性扩展 | 不支持 | 可通过setter实现 |
四、使用示例
// 定义Record
public record Product(
String sku,
BigDecimal price,
int stock
) {
// 自定义紧凑构造器(验证逻辑)
public Product {
Objects.requireNonNull(sku);
if (price.compareTo(BigDecimal.ZERO) < 0)
throw new IllegalArgumentException("价格不能为负");
}
// 自定义方法
public boolean isInStock() {
return stock > 0;
}
}
// 使用
Product laptop = new Product("P1001", new BigDecimal("5999.00"), 10);
System.out.println(laptop.sku()); // 直接访问字段
System.out.println(laptop.isInStock());
五、注意事项
- 不适合需要可变状态的场景
- 不能继承其他类(但可实现接口)
- 字段默认
private final,无法添加实例字段 - 可通过静态字段/方法扩展功能
在Java 21中,Record可配合密封接口(sealed interface)实现更安全的代数数据类型(ADT)设计,适用于领域驱动开发(DDD)中的值对象建模。
到此这篇关于Java中Record的应用小结的文章就介绍到这了,更多相关Java Record应用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
SpringBoot2.0整合Shiro框架实现用户权限管理的示例
这篇文章主要介绍了SpringBoot2.0整合Shiro框架实现用户权限管理的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2019-08-08
Spring Boot 基于 SCRAM 认证集成 Kafka 的过程详解
在本篇文章中,我们将探讨如何在 Spring Boot 应用中集成 Kafka 并使用 SCRAM 认证机制进行安全连接,并实现动态创建账号、ACL 权限、Topic,以及生产者和消费者等操作,感兴趣的朋友跟随小编一起看看吧2024-08-08
SpringBoot搭建Dubbo项目实现斐波那契第n项详解
这篇文章主要讲解了“SpringBoot+Dubbo怎么实现斐波那契第N项”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习吧2022-06-06


最新评论