”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > Java SE 开发人员认证准备的 Java Record 考试目标

Java SE 开发人员认证准备的 Java Record 考试目标

发布于2024-11-04
浏览:604

Java Records Exam Objective for Java SE Developer Certification Preparation

Java记录的引入为开发人员提供了一种新的数据结构,简化了数据对象的处理和创建。通过最新添加的记录模式和嵌套模式,记录处理变得更加高效和动态。

让我们首先回顾一下基础知识 - 记录是传统类的轻量级替代品,它充当具有内置访问器方法的数据的透明载体。它的主要目的是保存数据而不是实现复杂的行为。

然而,随着Java 21中记录模式的引入,传统的instanceof-and-cast习惯用法已经被简化。我们现在可以使用记录模式来组合这两个步骤,而不是检查对象是否是特定记录类的实例,然后将其转换为使用其组件。例如,不要这样写:

if (obj instanceof String) {
    String name = (String)obj;
    ... use name ...
}
In Java 21, we can simply write:

if (obj instanceof String name) {
    ... use name ...
}

这使得代码更加简洁并且不易出错,因为类型模式 String s 用于与 obj 的值进行匹配,并将模式变量 s 初始化为已转换为 String 的 obj 的值。

此外,Java 21还引入了嵌套模式,它允许匹配和分解更复杂的对象图,例如嵌套记录。假设我们有以下声明:

Record BankAccount(String accountNumber, String accountHolder, double balance) {}
Record Transaction(String transactionId, double amount, String type, String timestamp) {}
Record BankStatement(List transactions, BankAccount account) {}

我们现在可以使用嵌套记录模式来计算 BankStatement 对象的总交易金额,如下所示:

static double calculateTotalTransactions(BankStatement statement) {
    if (statement instanceof BankStatement(List transactions, BankAccount account)) {
        double total = 0;
        for (Transaction t : transactions) {
            total  = t.amount;
        }
        return total;
    }
    return 0;
}

在此示例中,外部模式 BankStatement(List transactions, BankAccount account) 包含一个嵌套模式 BankAccount account,用于从记录 BankStatement 中提取帐户组件。这允许更简洁和高效的代码,因为我们不必单独处理每个单独的子模式匹配。

记录模式的另一个有用的功能是类型推断。当记录模式命名通用记录类而不提供任何类型参数时,编译器将在使用该模式时自动推断类型参数。这简化了代码,如下例所示:

record MyBankAccount(L limitFactor, M money){};

static void recordInference(MyBankAccount bankaccount){
    switch(bankaccount){
        case MyBankAccount(var moneylimit, var amount) ->
            System.out.println("Messages: Inferred that account has balance "   amount   " with a limit of "   moneylimit);
        case MyBankAccount(var moneylimit, null)->
            System.out.println("Messages: Inferred that account has a balance of zero with a limit of "   moneylimit);
        ...
    }
}

嵌套记录模式也支持此功能,使代码更加简洁和可读。

最后,记录模式与 Java 21 中的 switch 表达式和语句完全集成。但是,需要注意的是,在 switch 语句中使用记录模式时,switch 块必须是详尽的。这意味着必须在 switch 块中考虑选择器表达式的所有可能值。对于记录模式,这是通过分析所使用的模式的类型来确定的。例如,case 标签 case Bar b 将匹配 Bar 类型的值以及 Bar 的所有可能的子类型。

总之,理解和掌握 Java 21 中的记录模式对于任何准备 Java SE 21 开发人员认证的人来说都是至关重要的。这些新功能允许更加简化和高效的记录处理,使其成为 Java 开发人员的一项基本技能。

版本声明 本文转载于:https://dev.to/myexamcloud/java-21-records-exam-objective-for-java-se-21-developer-certification-preparation-1bb9?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何实时捕获和流媒体以进行聊天机器人命令执行?
    如何实时捕获和流媒体以进行聊天机器人命令执行?
    在开发能够执行命令的chatbots的领域中,实时从命令执行实时捕获Stdout,一个常见的需求是能够检索和显示标准输出(stdout)在cath cath cant cant cant cant cant cant cant cant interfaces in Chate cant inter...
    编程 发布于2025-07-14
  • 如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    如何将MySQL数据库添加到Visual Studio 2012中的数据源对话框中?
    在Visual Studio 2012 尽管已安装了MySQL Connector v.6.5.4,但无法将MySQL数据库添加到实体框架的“ DataSource对话框”中。为了解决这一问题,至关重要的是要了解MySQL连接器v.6.5.5及以后的6.6.x版本将提供MySQL的官方Visual...
    编程 发布于2025-07-14
  • 在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在细胞编辑后,如何维护自定义的JTable细胞渲染?
    在JTable中维护jtable单元格渲染后,在JTable中,在JTable中实现自定义单元格渲染和编辑功能可以增强用户体验。但是,至关重要的是要确保即使在编辑操作后也保留所需的格式。在设置用于格式化“价格”列的“价格”列,用户遇到的数字格式丢失的“价格”列的“价格”之后,问题在设置自定义单元格...
    编程 发布于2025-07-14
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-07-14
  • Go语言垃圾回收如何处理切片内存?
    Go语言垃圾回收如何处理切片内存?
    Garbage Collection in Go Slices: A Detailed AnalysisIn Go, a slice is a dynamic array that references an underlying array.使用切片时,了解垃圾收集行为至关重要,以避免潜在的内存泄...
    编程 发布于2025-07-14
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-07-14
  • Python元类工作原理及类创建与定制
    Python元类工作原理及类创建与定制
    python中的metaclasses是什么? Metaclasses负责在Python中创建类对象。就像类创建实例一样,元类也创建类。他们提供了对类创建过程的控制层,允许自定义类行为和属性。在Python中理解类作为对象的概念,类是描述用于创建新实例或对象的蓝图的对象。这意味着类本身是使用类关...
    编程 发布于2025-07-14
  • 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...
    编程 发布于2025-07-14
  • 如何在Java的全屏独家模式下处理用户输入?
    如何在Java的全屏独家模式下处理用户输入?
    Handling User Input in Full Screen Exclusive Mode in JavaIntroductionWhen running a Java application in full screen exclusive mode, the usual event ha...
    编程 发布于2025-07-14
  • 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-07-14
  • Java字符串非空且非null的有效检查方法
    Java字符串非空且非null的有效检查方法
    检查字符串是否不是null而不是空的 if(str!= null && str.isementy())二手: if(str!= null && str.length()== 0) option 3:trim()。isement(Isement() trim whitespace whitesp...
    编程 发布于2025-07-14
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-07-14
  • 如何在Chrome中居中选择框文本?
    如何在Chrome中居中选择框文本?
    选择框的文本对齐:局部chrome-inly-ly-ly-lyly solument 您可能希望将文本中心集中在选择框中,以获取优化的原因或提高可访问性。但是,在CSS中的选择元素中手动添加一个文本 - 对属性可能无法正常工作。初始尝试 state)</option> < op...
    编程 发布于2025-07-14
  • 如何同步迭代并从PHP中的两个等级阵列打印值?
    如何同步迭代并从PHP中的两个等级阵列打印值?
    同步的迭代和打印值来自相同大小的两个数组使用两个数组相等大小的selectbox时,一个包含country代码的数组,另一个包含乡村代码,另一个包含其相应名称的数组,可能会因不当提供了exply for for for the uncore for the forsion for for ytry...
    编程 发布于2025-07-14
  • 如何干净地删除匿名JavaScript事件处理程序?
    如何干净地删除匿名JavaScript事件处理程序?
    删除匿名事件侦听器将匿名事件侦听器添加到元素中会提供灵活性和简单性,但是当要删除它们时,可以构成挑战,而无需替换元素本身就可以替换一个问题。 element? element.addeventlistener(event,function(){/在这里工作/},false); 要解决此问题,请考虑...
    编程 发布于2025-07-14

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

Copyright© 2022 湘ICP备2022001581号-3