Java记录是什么?如何与构造函数和方法一起使用?
引言
Java不断发展以满足现代编程需求,其最新功能之一——Java记录(在JDK 16中引入)简化了数据建模的任务。本文阐述了Java记录,详细介绍了它们如何与构造函数和方法一起使用,以简化您的Java编码体验。
理解Java记录
Java记录是一种旨在简化应用程序中“纯数据”表示的类。本质上,它们是不可变的数据载体,用于封装一些最终字段(称为“组件”)以及访问这些字段的方法。
在记录出现之前,开发人员必须为简单的数据载体类编写大量样板代码,包括构造函数、getter方法、equals()、hashCode()和toString()方法。Java记录消除了这种冗余,从而产生了更简洁、更易读的代码。
声明记录
Java记录的声明类似于类,使用`record`关键字。以下是一个示例:
Vpublic record User(String name, int age) {}
在上述声明中,User是记录,name和age是组件。默认情况下,记录会生成一个公共构造函数、公共读取访问器方法(类似于getter方法)以及equals()、hashCode()和toString()方法。
Java记录和构造函数
虽然记录会自动提供一个公共构造函数,但如果要向组件添加验证或规范化逻辑,则可以声明一个显式构造函数。显式构造函数必须与记录组件具有相同的参数。以下是一个示例:
public record User(String name, int age) { public User { if (age < 0) { throw new IllegalArgumentException("Age cannot be negative"); } if (name == null || name.isBlank()) { throw new IllegalArgumentException("Name cannot be blank"); } } }
在这个示例中,构造函数检查age是否为负数,name是否为空,如果任一条件满足则抛出异常。
Java记录和方法
就像普通类一样,记录也可以包含其他方法。但是,请记住,记录的主要目标是承载数据,因此建议限制其他方法的数量。以下是如何向记录添加方法:
public record User(String name, int age) { public boolean isAdult() { return age >= 18; } }
在上面的代码中,我们将isAdult()方法添加到User记录中,该方法根据age组件检查用户是否成年。
Java记录的限制
虽然记录有其优势,但它们也有一些限制:
记录隐式为final,因此不能扩展。
记录不能具有非final字段。
记录的每个组件都必须能够从构造函数参数中提供的状态明确推导出来。
记录旨在作为简单的数据载体,因此不应过于复杂或包含许多方法。
结论
Java记录是创建简单、不可变的数据载体类的强大工具,它减少了样板代码并提高了代码的可读性。它们与构造函数和方法无缝协作,提供了一个简化的编程模型。在您继续学习Java的过程中,采用和利用记录的力量无疑将大有裨益。