首页 > 编程笔记 > Java笔记 阅读:14

Java record类的用法(附带实例)

在 Java 程序中,定义类通常使用 class 关键字,本文讲解另一个用于定义类的 record 关键字。

record 关键字是 Java 16 正式发布的,其作用在于提供了一种更简洁、更紧凑的 final 类的定义方式。

Java final类

定义为 final 的类不能被继承。因此,如果希望一个类不被任何类继承,并且不允许其他人对这个类进行任何改动,可以将这个类设置为 final 类。

final 类的语法如下:
final 类名{}
如果将某个类设置为 final 类,则该类中的所有方法都被隐式地设置为 final 方法,但是 final 类中的成员变量可以被定义为 final 或非 final 形式。

例如,已知 JDK 的 java.lang 包下的 Math 数学类和 String 字符串类都是由 final 关键字修饰的类,这两个类就无法做任何类的父类,如果这两个类出现在 extends 右侧,就会发生编译错误,如下图所示。

Java record类

实际上,record 类就是一种 final 类,即不可变类。

例如,使用 class 关键字定义一个表示“时钟”的 final 类 Clock,其中包含两个被 final 修饰的变量,一个表示“时钟上有多少个小时”的 hours,另一个表示“每个小时有多少分钟”的 minutesperhour。此外,在 Clock 类中还包含了 3 个方法:
  1. 有参构造方法;
  2. 用于获取“时钟上有多少个小时”的 getHours() 方法;
  3. 用于获取“每个小时有多少分钟”的 getMinutesperhour() 方法。

Clock 类的代码如下:
public final class Clock {
    final int hours; //小时数
    final int minutesperhour; //每小时的分钟数

    public Clock(int hours, int minutesperhour) {
        this.hours = hours;
        this.minutesperhour = minutesperhour;
    }

    public int getHours() {
        return this.hours;
    }

    public int getMinutesperhour() {
        return this.minutesperhour;
    }
}

下面演示如何使用 record 关键字把上述的 final 类修改为 record 类。代码如下:
public record Clock(int hours, int minutesperhour) {
    public int getHours() {
        return this.hours;
    }

    public int getMinutesperhour() {
        return this.minutesperhour;
    }
}

相关文章