Java レコードの導入により、データ オブジェクトの処理と作成を簡素化する新しいデータ構造が開発者に提供されました。最新のレコード パターンとネストされたパターンの追加により、レコード処理がさらに効率的かつ動的になりました。
基本を確認することから始めましょう。レコードは、組み込みのアクセサー メソッドを使用してデータの透過的なキャリアとして機能する、従来のクラスに代わる軽量のクラスです。その主な目的は、複雑な動作を実装するのではなく、データを保持することです。
ただし、Java 21 でのレコード パターンの導入により、従来のインスタンスオブアンドキャストのイディオムが簡素化されました。オブジェクトが特定のレコード クラスのインスタンスであるかどうかを確認し、それをキャストしてそのコンポーネントを使用する代わりに、レコード パターンを使用して両方の手順を組み合わせることができるようになりました。たとえば、次のように書く代わりに:
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(Listtransactions, BankAccount account) {}
次のように、ネストされたレコード パターンを使用して、BankStatement オブジェクトから合計取引金額を計算できるようになりました。
static double calculateTotalTransactions(BankStatement statement) { if (statement instanceof BankStatement(Listtransactions, BankAccount account)) { double total = 0; for (Transaction t : transactions) { total = t.amount; } return total; } return 0; }
この例では、外側のパターン BankStatement(Listトランザクション, BankAccount account) には、レコード BankStatement からアカウントコンポーネントを抽出するために使用されるネストされたパターン BankAccount account が含まれています。これにより、個々のサブパターンの一致を個別に処理する必要がなくなるため、より簡潔で効率的なコードが可能になります。
レコード パターンのもう 1 つの便利な機能は型推論です。型引数を指定せずにレコード パターンで汎用レコード クラスを指定すると、パターンの使用時にコンパイラが自動的に型引数を推論します。これにより、次の例に示すようにコードが簡素化されます:
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 SE 21 開発者認定資格の準備をしている人にとって、Java 21 のレコード パターンを理解し、習得することが重要です。これらの新機能により、より合理化された効率的なレコード処理が可能になり、Java 開発者にとって必須のスキルとなっています。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3