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<Transaction> transactions, BankAccount account) {}
我們現在可以使用巢狀記錄模式來計算 BankStatement 物件的總交易金額,如下所示:
static double calculateTotalTransactions(BankStatement statement) { if (statement instanceof BankStatement(List<Transaction> 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 extends LimitFactor, M extends Money>(L limitFactor, M money){}; static void recordInference(MyBankAccount<MoneyLimit, Amount> 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 開發人員的基本技能。
以上是Java SE 開發人員認證準備的 Java Record 考試目標的詳細內容。更多資訊請關注PHP中文網其他相關文章!