Java Records: 简化数据携带类的利器

Java Records: 简化数据携带类的利器

引言

在 Java 14 中引入并在 Java 16 中成为正式特性的 record,是为了简化不可变数据携带类的创建。它极大地减少了样板代码,使得代码更加简洁和易读。本文将详细介绍 record 的用法和特点。

什么是 Record?

record 是一种特殊的类,用于表示不可变的数据携带类。它自动为所有字段生成构造函数、equals()hashCode()toString() 方法,从而简化了数据类的编写。

定义和语法

定义一个 record 非常简单。它的语法如下:

public record Point(int x, int y) {}

以上代码定义了一个名为 Pointrecord,它包含两个字段:xy。编译器将自动生成构造函数、访问器方法、equals()hashCode()toString() 方法。

详细用法

1. 自动生成的方法

当定义一个 record 时,编译器会自动生成以下内容:

  • 构造函数:接受所有字段作为参数。
  • 访问器方法:每个字段都有一个方法来返回其值。
  • equals() 方法:比较两个 record 对象的字段值。
  • hashCode() 方法:基于字段值生成哈希码。
  • toString() 方法:返回包含字段值的字符串表示。

示例:

public record Point(int x, int y) {}

public class Main {
    public static void main(String[] args) {
        Point point = new Point(1, 2);
        System.out.println(point.x());  // 输出: 1
        System.out.println(point.y());  // 输出: 2
        System.out.println(point);  // 输出: Point[x=1, y=2]
    }
}
2. 自定义构造函数

虽然 record 自动生成了构造函数,但你也可以定义自己的构造函数,例如进行参数验证:

public record Point(int x, int y) {
    public Point {
        if (x < 0 || y < 0) {
            throw new IllegalArgumentException("Coordinates must be non-negative");
        }
    }
}
3. 添加方法

你可以向 record 添加方法,以扩展其功能:

public record Point(int x, int y) {
    public int sum() {
        return x + y;
    }
}
4. 嵌套的 Record

record 可以嵌套在其他类或接口中:

public class Geometry {
    public record Point(int x, int y) {}
}
5. 静态字段和方法

record 可以包含静态字段和方法,但不能包含实例字段:

public record Point(int x, int y) {
    public static final Point ORIGIN = new Point(0, 0);

    public static double distance(Point p1, Point p2) {
        return Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2));
    }
}

使用场景

record 主要用于以下场景:

  1. 数据传输对象 (DTO):简化数据传输对象的定义和实现。
  2. 不可变对象:确保对象状态不可变,提供线程安全性。
  3. 配置对象:定义包含配置信息的简单对象。

总结

record 是 Java 语言中强大的新特性,它简化了数据携带类的创建,减少了样板代码,使得代码更加简洁和易读。在需要不可变对象的场景下,record 是一个非常有用的工具。

希望这篇博文能帮助你理解并使用 record,提升你的 Java 编程体验。


示例代码下载

你可以通过以下链接下载示例代码:[下载链接]


参考资料


如有任何问题或建议,请在评论区留言。感谢阅读!


  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值