自学内容网 自学内容网

【Java SE】record类

之前我们使用 class 关键字来定义类,但从 Java 16 开始,我们也可以利用 record 关键字来定义类。record 关键字提供了一种更为简洁、紧凑的 final 类定义方式。下面介绍 record 类的一些使用细节。

record 概念:Java 16 引入的一种特殊形式类,其状态不可变,而且公共可读。

一、record类声明

Java 16 之前,我们定义一个 Point 类,用于描述平面上的一个点时(有xy坐标),通常会这样定义类:

public class Point {
private final double x;
private final double y;
public Point(double x, double y) {this.x = x; this.y = y;}
public double getX() {return x;}
public double getY() {return y;}
}

Java 16 之后,我们可以利用 record类 这一新特性简化上面的代码。通过 record 关键字定义和声明 Point 类:

record Point(double x, double y) {}
Point p = new Point(1.0, 2.0);
System.out.println(p.x() + " " + p.y());

使用 record 关键字定义和声明 Point 类后,Java 会自动创建两个实例字段:private final double x;private final double y;。此外,record 还提供了访问器方法 x()y() 用于访问这些字段。需要注意的是,这里并不是使用传统的 getX()getY() 方法,而是直接使用 x()y() 方法来获取属性值。

二、record类特点

利用 record 关键字声明类主要是为了简化声明过程,record 类本质是一类特殊的 class,其具备以下这些特点:

  • record 类是 final
  • record 类自动实现访问器、toStringequalshashCode 方法
  • 成员变量均为 public属性
record Point(double x, double y) {}
Point p1 = new Point(1.0, 2.0);
System.out.println(p1.x() + " " + p1.y());
System.out.println(p1);

Point p2 = new Point(1.0, 2.0);
Point p3 = new Point(3.0, 4.0);
System.out.println(p1.equals(p2)); // true
System.out.println(p1.equals(p3)); // false
System.out.println(p1.hashCode() + " " + p2.hashCode() + " " + p3.hashCode());

三、定义成员函数

由于 record 声明本质也是声明类,因此可以定义成员方法,比如在 Point 类中定义和使用计算当前平面点到原点(x=0,y=0)距离的方法:

record Point(double x, double y) {
    public double distanceToOrigin() {
        return Math.sqrt(x * x + y * y);
    }
}
Point p = new Point(1.0, 2.0);
System.out.println(p.distanceToOrigin());

原文地址:https://blog.csdn.net/zzy_NIC/article/details/143659240

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!