在学习JDK-14新功能时,我发现了RecordsAPI
按照谷歌Records在JDK 14中的定义:
记录,它将提供一种紧凑的语法来声明类,这些类是浅层不可变数据的透明持有者。该提案指出,声明浅不可改变的,行为良好的名义数据聚合应该简单明了
我无法理解,因为网上可用的材料很少,Record借助一个好的例子,可以帮助我了解什么。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Java中,Records是JDK 14引入的一个预览功能,它旨在简化不可变数据类的定义。Records提供了一种更简洁的方式来创建主要用于保存数据的类,这些类通常包含getter方法、equals()、hashCode()、toString()等方法,而不需要手动编写这些模板代码。它们强调的是数据而非行为,非常适合用于领域模型对象、DTOs(数据传输对象)等场景。
下面通过一个简单的例子来帮助你理解Record的工作原理:
假设我们要定义一个表示学生信息的类,传统方式可能是这样的:
public class Student {
private final String name;
private final int age;
private final String school;
public Student(String name, int age, String school) {
this.name = name;
this.age = age;
this.school = school;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public String getSchool() {
return school;
}
// 你需要手动重写equals(), hashCode(), 和 toString() 方法
// ...
}
使用Records,这个类可以简化为:
public record Student(String name, int age, String school) {
}
仅此一行就完成了之前所有的工作。编译器会自动为我们生成构造方法、getter方法、equals()、hashCode()和toString()等。这里的字段默认就是final的,体现了不可变性。
使用这个Record也很简单:
Student student = new Student("Alice", 20, "Alibaba University");
System.out.println(student); // 输出: Student[name=Alice, age=20, school=Alibaba University]
可以看到,Records大大减少了样板代码,使得代码更加清晰和易于维护,特别适合那些主要职责是持有数据的类。不过,请注意,Records在JDK 16中成为正式特性,并在后续版本中得到进一步优化和推广。