Java基础教程(四十四)Java核心类之记录类:Java记录类,数据封装的极简革命

深度解析Java记录类

痛点:传统POJO的样板代码地狱

在记录类出现前,Java定义一个纯数据载体需手动编写大量重复代码:

public class Point {
    private final int x;
    private final int y;

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }

    // 冗长的getter/equals/hashCode/toString...
}

记录类的核心特性

  1. 极简声明
    一行代码替代整个类:
public record Point(int x, int y) { }
  1. 自动实现核心方法
    编译器自动生成:
    · 全字段构造器 Point(int x, int y)
    · 访问器 x() 和 y()(注意非getX())
    · equals() 与 hashCode()
    · 字段可视化 toString()
  2. 不可变性保障
    所有字段隐式为 final,创建后状态不可变,保障线程安全。

进阶用法示例

public record Location(String name, double lat, double lng) {
    // 自定义紧凑构造器进行校验
    public Location {
        if (lat < -90 || lat > 90) 
            throw new IllegalArgumentException("Invalid latitude");
        name = name.trim(); // 可对参数重新赋值
    }
    
    // 添加自定义方法
    public String toUrl() {
        return "https://maps.com/?q=" + lat + "," + lng;
    }
}

// 使用示例
Location office = new Location("HQ", 37.7749, -122.4194);
System.out.println(office.name()); // 输出:HQ
System.out.println(office.toUrl()); // 输出地图URL

关键限制与适用场景

· ❌ 不可继承类:隐含继承 Record 类(final)
· ❌ 不可添加非static字段:仅允许声明中的组件字段
· ✅ 最佳场景:API响应DTO、数据库查询投影、元组替代品、配置对象
· 🚫 避免场景:需要继承、动态字段或复杂内部状态的业务模型

版本要求:Java 14+(预览),Java 16+(正式功能)


记录类以声明即定义的哲学重塑Java数据建模方式,在减少代码量的同时提升安全性与可读性。它并非取代传统类,而是为特定场景提供精准解决方案,让Java在数据封装领域焕发新生。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

值引力

持续创作,多谢支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值