Java中Record的应用

目录

核心特性

典型应用场景

与传统类对比

使用示例

注意事项


Record是Java 14引入的预览特性(Java 16正式发布),主要用于简化不可变数据载体的建模。其核心价值在于自动生成模板代码,替代传统POJO类的繁琐编写。

一、核心特性
  1. 自动生成方法

    编译器自动生成:

    • final字段的getter(方法名即字段名,无get前缀)
    • equals()hashCode()
    • toString()
    • 全字段构造器
  2. 不可变性

    所有字段默认为final,创建后状态不可修改。

  3. 语法结构

    java 复制代码
    public record 类名(类型1 字段1, 类型2 字段2...) { 
        // 可选:自定义方法/构造器
    }
二、典型应用场景
  1. DTO数据传输对象

    java 复制代码
    public record UserDTO(String id, String name, LocalDateTime createTime) {}
  2. 多返回值方法

    替代Map或临时类:

    java 复制代码
    public record Coordinate(double x, double y) {}
    
    public Coordinate calculatePosition() {
        return new Coordinate(12.5, 8.3);
    }
  3. 模式匹配(Java 17+)

    配合instanceof简化类型判断:

    java 复制代码
    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实现
四、使用示例
java 复制代码
// 定义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());
五、注意事项
  1. 不适合需要可变状态的场景
  2. 不能继承其他类(但可实现接口)
  3. 字段默认private final,无法添加实例字段
  4. 可通过静态字段/方法扩展功能

在Java 21中,Record可配合密封接口(sealed interface)实现更安全的代数数据类型(ADT)设计,适用于领域驱动开发(DDD)中的值对象建模。

相关推荐
吴声子夜歌5 小时前
ApacheCommons——commons-pool2(高性能通用对象池框架)
java·开发语言·apache
xcl092510 小时前
幼儿托育系统开发实战:从需求分析到上线全流程指南
java·大数据·需求分析
吴声子夜歌10 小时前
ApacheCommons——commons-cli(命令行参数解析)
java·开发语言·apache
小小猪的春天10 小时前
Java 手写第一个 MCP Server:Spring AI MCP 半小时跑通
java·人工智能·spring boot·ai编程
find1star10 小时前
LeetCode 141:环形链表
java·算法·leetcode·链表
今天AI了吗11 小时前
DeepSeek Harness 深度解析:从评测架构到实战落地
java·网络·数据库·人工智能·架构·java-ee
许彰午11 小时前
27-AuthService登录链路
java·低代码·架构
泡海椒11 小时前
JQuick-Curl 性能分析:并发场景下的性能表现与调优,第三方接口调用不只要快写也要稳跑
java·开发语言·okhttp
Rain的Java大神之路13 小时前
JavaWeb开发如何解决跨域问题
java·前端·后端·nginx·web安全·面试·运维开发
自动化监测Learner13 小时前
Navicat Premium 17 中文版安装教程(2026最新版)
java·linux·数据库