”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 探索 Java 记录类型

探索 Java 记录类型

发布于2024-08-01
浏览:920

Exploring Java Record Types

Java 记录类型作为预览功能在 Java 14 中引入,并在 Java 16 中变得稳定,提供了一种定义不可变数据载体的简洁方法。它们旨在通过减少样板代码并确保不变性和相等语义来简化创建简单数据保存类的任务。

什么是 Java 记录?

Java 记录是 Java 编程语言中的一种特殊类,用于对不可变数据进行建模。 Records 自动生成构造函数、访问函数、equals()、hashCode() 和 toString() 方法,使其成为数据传输对象的理想选择。

定义记录

在 Java 中定义记录很简单。这是一个简单的例子:

public record Person(String name, int age) {}

在此示例中,人员记录自动包括:

  • 每个组件的私有最终字段(姓名和年龄)。
  • 初始化这些字段的公共构造函数。
  • 每个字段的Getter方法(name()和age())。
  • equals()、hashCode() 和 toString() 方法。

使用记录的好处

  1. 简洁性:记录显着减少了样板代码。无需手动编写 getter、equals()、hashCode() 和 toString() 方法。
  2. 不可变性:记录本质上是不可变的,确保记录创建后其字段不能被修改。
  3. 增强可读性:使用记录的代码更清晰、更容易理解。

记录的使用示例

以下是如何在 Java 应用程序中使用记录的实际示例:

public record Employee(int id, String name, double salary) {}

public class RecordExample {
    public static void main(String[] args) {
        Employee emp = new Employee(1, "Alice", 75000);
        System.out.println(emp);

        // Accessing fields
        System.out.println("ID: "   emp.id());
        System.out.println("Name: "   emp.name());
        System.out.println("Salary: "   emp.salary());
    }
}

输出:

Employee[id=1, name=Alice, salary=75000.0]
ID: 1
Name: Alice
Salary: 75000.0

定制记录

虽然记录提供了许多开箱即用的功能,但您仍然可以根据需要自定义它们。例如,您可以在规范构造函数中添加验证逻辑:

public record Product(String name, double price) {
    public Product {
        if (price 



结论

Java 记录是 Java 语言的强大补充,可以更轻松地用最少的代码创建不可变的数据载体。它们增强代码可读性并减少样板文件,使开发人员能够专注于应用程序的核心逻辑。

版本声明 本文转载于:https://dev.to/adaumircosta/exploring-java-record-types-o72?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何在其容器中为DIV创建平滑的左右CSS动画?
    如何在其容器中为DIV创建平滑的左右CSS动画?
    通用CSS动画,用于左右运动 ,我们将探索创建一个通用的CSS动画,以向左和右移动DIV,从而到达其容器的边缘。该动画可以应用于具有绝对定位的任何div,无论其未知长度如何。问题:使用左直接导致瞬时消失 更加流畅的解决方案:混合转换和左 [并实现平稳的,线性的运动,我们介绍了线性的转换。这...
    编程 发布于2025-04-21
  • 为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    为什么在我的Linux服务器上安装Archive_Zip后,我找不到“ class \” class \'ziparchive \'错误?
    Class 'ZipArchive' Not Found Error While Installing Archive_Zip on Linux ServerSymptom:When attempting to run a script that utilizes the ZipAr...
    编程 发布于2025-04-21
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-04-21
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_rename() runkit_function_redefine() //重新定义'this'以返回“新和改...
    编程 发布于2025-04-21
  • 如何在运行时动态检测Java注解?
    如何在运行时动态检测Java注解?
    在Java开发领域中动态检测Java注释Accessing Annotated Classes at RuntimeTo scan the classpath for annotated classes, consider leveraging the ClassPathScanningCandi...
    编程 发布于2025-04-21
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 考虑文档中给出的示例:这是内部发生的事情: 现在在3月3日添加另一个月,因为2月在2001年只有2...
    编程 发布于2025-04-21
  • 如何限制动态大小的父元素中元素的滚动范围?
    如何限制动态大小的父元素中元素的滚动范围?
    在交互式接口中实现垂直滚动元素的CSS高度限制,控制元素的滚动行为对于确保用户体验和可访问性是必不可少的。一种这样的方案涉及限制动态大小的父元素中元素的滚动范围。问题:考虑一个布局,其中我们具有与用户垂直滚动一起移动的可滚动地图div,同时与固定的固定sidebar保持一致。但是,地图的滚动无限期...
    编程 发布于2025-04-21
  • 如何从2D数组中提取元素?使用另一数组的索引
    如何从2D数组中提取元素?使用另一数组的索引
    Using NumPy Array as Indices for the 2nd Dimension of Another ArrayTo extract specific elements from a 2D array based on indices provided by a second ...
    编程 发布于2025-04-21
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-21
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-21
  • 切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    切换到MySQLi后CodeIgniter连接MySQL数据库失败原因
    无法连接到mySQL数据库:故障排除错误消息要调试问题,建议将以下代码添加到文件的末尾.//config/database.php并查看输出: ... ... 回声'... echo '<pre>'; print_r($db['default']); echo '</pr...
    编程 发布于2025-04-21
  • 左连接为何在右表WHERE子句过滤时像内连接?
    左连接为何在右表WHERE子句过滤时像内连接?
    左JOIN CONUNDRUM:WITCHING小时在数据库Wizard的领域中变成内在的加入很有趣,当将c.foobar条件放置在上面的Where子句中时,据说左联接似乎会转换为内部连接。仅当满足A.Foo和C.Foobar标准时,才会返回结果。为什么要变形?关键在于其中的子句。当左联接的右侧值...
    编程 发布于2025-04-21
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-21
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-04-21
  • Python高效去除文本中HTML标签方法
    Python高效去除文本中HTML标签方法
    在Python中剥离HTML标签,以获取原始的文本表示Achieving Text-Only Extraction with Python's MLStripperTo streamline the stripping process, the Python standard librar...
    编程 发布于2025-04-21

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3