专栏目录

三、Java 9 ~ 17 新特性试读

Java 16 新特性:记录(Record)类型

友情提示

推荐您使用 Chrome 浏览器来阅读本实战专栏,其他浏览器可能存在兼容性问题。

在 Java 16 中,引入了记录 (Record)类型,它被用于定义数据载体对象。大白话解释就是,当想要创建的对象,仅仅需要初始化的时候赋予一些值,后续永远不需要再修改时,就可以考虑使用到 Record 类型了。

在高版本的 IDEA 中,当我们新建类时,就有 Record 类型可供选择,如下图所示:

本小节中,就通过一些示例代码,来感受一下 Record 类型。

1. 定义 Record

创建一个 PersonRecord 类型,定义两个字段,代码如下:

// 定义两个字段, name : 姓名;age : 年龄
public record PersonRecord(String name, int age) {    
}

当使用 record 关键字时,编译器会自动生成:

  • final 类型不可变的字段;
  • 全参构造器;
  • 能访问到每个字段,即 get 方法;
  • equals() 方法;
  • hashCode() 方法;
  • toString() 方法;

2. 使用示例

使用示例如下:

    public static void main(String[] args) {
        PersonRecord record = new PersonRecord("犬小哈", 18);
        
        // record.name = "张三"; // 错误,无法再修改字段值

        System.out.println("name: " + record.name());
        System.out.println("age: " + record.age());
        System.out.println(record); // 调用 toString() 方法
    } 

可以看到,record 类型的对象在初始化的时候,值就一次性设置好了,后续是不允许再修改它的值的。

控制台输出如下:

3. 可作为 Map 的 Key 被使用

TIP : 要想自定义的类充当 Map 中的 key 使用 , 你必须为这个类定义 equals() 方法和 hashCode() 方法。

由于 Record 对象会自动帮助我们生成这两个方法,自然的,它可以很轻松的作为 Map 中的 key 被使用。示例代码如下:

    public static void main(String[] args) {
        PersonRecord record = new PersonRecord("犬小哈", 18);

        // 作为 key 被使用
        var map = Map.of(record, "喜欢唱、跳、Rap");

        System.out.println(map);
    }

控制台输出如下:

最后编辑于 2024-04-30 16:48:26