专栏目录

三、Java 9 ~ 17 新特性试读

专栏目录

三、Java 9 ~ 17 新特性试读

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

作者头像 犬小哈
528字
2分钟
3张图
2,659

友情提示 : 推荐使用谷歌浏览器来阅读本专栏,其他浏览器可能存在兼容性问题。

在 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);
    }

控制台输出如下:

添加小哈私人微信

已加入星球的小伙伴,记得添加小哈私人微信,拉你进 VIP 讨论群

一定要备注 “星球” 哟,不然通过率极低

分享有赏

打开星球 APP,操作图如下

觉得星球还不错的话,可邀请好友加入呀

通过星球 APP 专属的分享链接加入,分享者将获得票价的 40% 分成,同时可获得大量积分,每月积分靠前者,可获取小哈赠书哟,一波赢回票价~

微信扫一扫,加入星球

领券加入,超便宜~

专属的项目实战 / 1v1 提问 / Java学习路线

社群讨论 / 每月赠书 / 学习打卡

👉星球介绍