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);
}
控制台输出如下: