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

探索 Java 记录类型

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

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]删除
最新教程 更多>
  • HTML 格式标签
    HTML 格式标签
    HTML 格式化元素 **HTML Formatting is a process of formatting text for better look and feel. HTML provides us ability to format text without us...
    编程 发布于2024-12-21
  • 我们如何有效地将 AST 编译回可读的源代码?
    我们如何有效地将 AST 编译回可读的源代码?
    将 AST 编译回源代码将抽象语法树 (AST) 编译回源代码,通常称为“漂亮打印” ,”对于在 AST 转换后生成人类可读的代码至关重要。有两种主要方法需要考虑:保持原始代码格式或生成美观的代码。一种方法涉及向 AST 中的每个节点添加 ->compile 方法。但是,这种方法限制了生成的输出中的...
    编程 发布于2024-12-21
  • 为什么IntelliJ编译成功后显示“无法解析符号”错误?
    为什么IntelliJ编译成功后显示“无法解析符号”错误?
    尽管编译成功,IntelliJ Inspector 错误“无法解析符号”IntelliJ 用户可能会遇到令人困惑的情况,检查器标记为“无法解析符号” " 尽管编译成功,但库导入错误。向 Maven 项目添加依赖项时可能会出现此问题,如 jmime 的情况所示。原因分析IntelliJ 为其...
    编程 发布于2024-12-21
  • SSMS中T-SQL调试时如何查看表变量值?
    SSMS中T-SQL调试时如何查看表变量值?
    在调试期间查看表变量值在 SQL Server Management Studio (SSMS) 中调试 Transact-SQL (T-SQL) 代码时,检查存储在表变量中的值会很有帮助。然而,标准调试工具并没有提供直接查看表变量内容的方法。解决方案:将表变量转换为 XML此问题的简单解决方案包括...
    编程 发布于2024-12-21
  • 如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 查找今天生日的用户?
    如何使用 MySQL 识别今天生日的用户使用 MySQL 确定今天是否是用户的生日涉及查找生日匹配的所有行今天的日期。这可以通过一个简单的 MySQL 查询来实现,该查询将存储为 UNIX 时间戳的生日与今天的日期进行比较。以下 SQL 查询将获取今天有生日的所有用户: FROM USERS ...
    编程 发布于2024-12-21
  • 除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    除了“if”语句之外:还有哪些地方可以在不进行强制转换的情况下使用具有显式“bool”转换的类型?
    无需强制转换即可上下文转换为 bool您的类定义了对 bool 的显式转换,使您能够在条件语句中直接使用其实例“t”。然而,这种显式转换提出了一个问题:“t”在哪里可以在不进行强制转换的情况下用作 bool?上下文转换场景C 标准指定了四种值可以根据上下文转换为的主要场景bool:语句:if、whi...
    编程 发布于2024-12-21
  • 在 Go 中使用 WebSocket 进行实时通信
    在 Go 中使用 WebSocket 进行实时通信
    构建需要实时更新的应用程序(例如聊天应用程序、实时通知或协作工具)需要比传统 HTTP 更快、更具交互性的通信方法。这就是 WebSockets 发挥作用的地方!今天,我们将探讨如何在 Go 中使用 WebSocket,以便您可以向应用程序添加实时功能。 在这篇文章中,我们将介绍: WebSocke...
    编程 发布于2024-12-21
  • 为什么我的 PHP 脚本抛出“无法加载动态库”警告?
    为什么我的 PHP 脚本抛出“无法加载动态库”警告?
    疑难解答:PHP警告“无法加载动态库”执行PHP脚本时,可能会遇到以下错误:PHP Warning: PHP Startup: Unable to load dynamic library '/usr/local/lib/php/extensions/no-debug-non-zts-2009062...
    编程 发布于2024-12-21
  • 如何使用 Eloquent 或查询生成器将多行插入数据库?
    如何使用 Eloquent 或查询生成器将多行插入数据库?
    使用 Eloquent 或 Fluent 同时插入多行此查询探讨了如何使用 Eloquent 中的单个查询将多行插入数据库(或流畅的)框架。给定的示例使用 UserSubject::where('user_id', Auth::id())->select('subject_i...
    编程 发布于2024-12-21
  • 如何在 Retrofit 中使用自定义 Gson 转换器高效提取嵌套 JSON 数据?
    如何在 Retrofit 中使用自定义 Gson 转换器高效提取嵌套 JSON 数据?
    在 Retrofit 中使用自定义 Gson 转换器提取嵌套 JSON许多 API 提供具有通用 JSON 结构的响应,其中根对象包含嵌套对象包含所需数据的“内容”字段。然而,大多数 POJO 只对“内容”字段中的数据进行建模,使得改造类型适配器无法提取并返回适当的对象。为了解决这个问题,可以开发一...
    编程 发布于2024-12-21
  • 如何使用 PHP 将字符串中的普通 URL 转换为可点击的超链接?
    如何使用 PHP 将字符串中的普通 URL 转换为可点击的超链接?
    使用 PHP 链接字符串中的 URL在 PHP 中,链接字符串中的 URL 可能是一项有用的任务,例如在文本中生成可点击链接等任务内容。一种常见的用例是将包含 URL 的纯字符串转换为具有可点击超链接的 HTML。语法:$string = preg_replace( "~[[:alph...
    编程 发布于2024-12-21
  • 为什么在 C 语言中从字符中减去“0”会显示其数值?
    为什么在 C 语言中从字符中减去“0”会显示其数值?
    解码字符值:为什么减去“0”会泄露数字表示出现一个令人费解的问题:为什么从a中减去“0” C 中的字符揭示了它所代表的数值?为了解开这个谜团,让我们深入研究一下ASCII(美国信息交换标准代码)领域,它为每个字符分配数字代码。 '0' 保留此数字序列中的第一个位置,后续字符逐渐分配更...
    编程 发布于2024-12-21
  • 如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    如何在 PHP 中组合两个关联数组,同时保留唯一 ID 并处理重复名称?
    在 PHP 中组合关联数组在 PHP 中,将两个关联数组组合成一个数组是一项常见任务。考虑以下请求:问题描述:提供的代码定义了两个关联数组,$array1 和 $array2。目标是创建一个新数组 $array3,它合并两个数组中的所有键值对。 此外,提供的数组具有唯一的 ID,而名称可能重合。要求...
    编程 发布于2024-12-21
  • 如何启用和禁用MySQL查询审计一小时?
    如何启用和禁用MySQL查询审计一小时?
    在 MySQL 中启用查询审核如果您希望监控并记录在 MySQL 数据库上执行的所有查询一个小时,您可以可以打开审核日志记录。审核日志记录配置启用审核日志记录和转储将日志写入文件,请在 MySQL 控制台中执行以下命令:SET global log_output = 'FILE'; SET glob...
    编程 发布于2024-12-21
  • 如何使用 JavaScript 创建可悬停的选择框选项?
    如何使用 JavaScript 创建可悬停的选择框选项?
    可悬停选择框选项当前的问题涉及创建一个选择框,当将字段悬停在该选择框上时,选项说明可见,而不是单击打开options.实现为了实现此功能,我们利用了 JavaScript 方法:如下:$('#selectUl li:not(":first")').addClass('unsele...
    编程 发布于2024-12-21

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

Copyright© 2022 湘ICP备2022001581号-3