Java 開発者が知っておくべき Java のパターン マッチングと変更の記録
Java 16 のリリースでは、レコード (JEP 395) の導入による大幅な改善が導入され、主に使用されるクラスを宣言するためのよりシンプルかつ簡潔な方法が可能になりました。データを持ち運ぶために。この改善は Java 21 でさらに強化され、パターン マッチングとレコード (JEP 406) が追加されました。この新機能により、パターン マッチングを使用して、値が Record クラスのインスタンスであるかどうかをテストし、より効率的な方法でそのコンポーネントを抽出できるようになります。この記事では、Java 21 のパターン マッチングとレコードによってもたらされる変更と、それが Java 開発者にどのようなメリットをもたらすかを検討します。
データの透明なキャリアとして記録
Java 16 で導入されたレコードは、主にデータの保存と伝達に使用されるクラスです。これらは透過的なキャリアであり、主な目的はデータを保持することであり、コンストラクター、メソッド、equals/hashCode メソッドなどの他のすべての機能は、レコードで定義されたデータ フィールドに基づいてコンパイラーによって自動的に生成されます。そのため、データをシリアル化するかネットワーク経由で送信する必要があるシナリオでの使用に最適です。
2 つの X 座標と Y 座標を定義する Line クラスの例を考えてみましょう。
レコード Line(int x, int y) {}
このクラスを使用するには、Line クラスのインスタンスを作成し、組み込みコンポーネント アクセサー メソッド x() および y() を使用してそのデータ フィールドにアクセスするだけです。
行 line = new Line(0, 10);
int x = line.x();
int y = line.y();
System.out.println("X: " + x + ", Y: " + y); // 出力: X: 0、Y: 10
レコードとのパターンマッチング
Java 21 では、パターン マッチングが追加され、値が Record クラスのインスタンスであるかどうかをテストし、より効率的な方法でそのコンポーネントを抽出できるようになります。この機能は、レコードを広範囲に使用する大規模なコードベースを扱う場合に特に役立ちます。
オブジェクトが Line クラスのインスタンスであるかどうかをテストし、そのコンポーネントを抽出する次の例を考えてみましょう。
static void length(Object obj) {
if (行 l のオブジェクトインスタンス) {
int x = l.x();
int y = l.y();
System.out.println(y-x);
}
}
ご覧のとおり、型パターンを使用してオブジェクトが Point のインスタンスであるかどうかをテストし、そうであれば、組み込みのコンポーネント アクセサー メソッドを呼び出してそのコンポーネントを抽出しました。このコードは機能しますが、Java 21 のレコード パターンを使用するとさらに簡素化できます。
レコード パターンを使用すると、値が Record クラスのインスタンスであるかどうかをテストできるだけでなく、1 行のコードでそのコンポーネントを抽出することもできます。これは、抽出されたコンポーネントのローカル変数の宣言をパターン自体にリフトし、値がパターンと一致したときにアクセサー メソッドを呼び出してそれらの変数を初期化することによって実現されます。
レコード パターンを使用する次のコードを考えてみましょう:
static void length(Object obj) {
if (obj instanceof Line(int x, int y)) {
System.out.println(y-x);
}
}
このコードははるかに簡潔で読みやすくなっています。新しいオブジェクトを作成し、そのコンポーネントのアクセサー メソッドを呼び出してデータを取得する必要がなくなりました。レコード パターンはコンポーネントを直接抽出して初期化し、コードをより合理化します。
ネストされたレコード パターン
開発者が直面する大きな課題の 1 つは、複雑なオブジェクト グラフを扱い、そこからデータを抽出することです。ここで、パターン マッチングの真の力が発揮されます。パターン マッチングを使用すると、エレガントにスケーリングし、より複雑なオブジェクト グラフを照合できるようになります。
次のクラスについて考えてみましょう: 従業員、部門 (列挙)、および会社 (レコード)。レコード パターンを使用して、会社オブジェクトから従業員の部門を抽出できます。
// Java 21 以降
static void printEmployeeDepartment(会社 c, 文字列名) {
if (c instanceof Company(Department dept, List
for (従業員 e : 従業員) {
if (e.getName().equals(name)) {
System.out.println(name + " は " + dept + " 部門にあります。");
戻る;
}
}
}
System.out.println(名前 + " 見つかりません。");
}
この例では、ネストされたパターンを使用して、Company オブジェクトから従業員の部門を抽出しています。指定された Company オブジェクトに部門と従業員のリストがあるかどうかを確認し、リストをループして指定された名前の従業員を見つけます。従業員が見つかった場合は、その部署を印刷します。そうでない場合は、従業員が見つからなかったというメッセージを出力します。
ネストされたパターンは、複数の値を一度に照合して分解する必要がある状況でも使用できます。指定された座標が四角形の内側にあるかどうかを確認する次の例を考えてみましょう:
//Java 21 以降
レコードポイント(double x, double y) {}
レコード Rectangle(左上点、右下点) {}
// 指定された点が指定された四角形の内側にあるかどうかを確認します
static boolean isPointInsideRectangle(Point p, Rectangle r) {
if (r インスタンスオブ Rectangle(Point(var x1, var y1), Point(var x2, var y2))) {
if (p.x() > x1 && p.y() > y1 && p.x()
true を返します;
}
}
false を返します;
}
この例では、ネストされたパターンを使用して、特定の Point オブジェクトが特定の Rectangle オブジェクトの境界内に収まるかどうかをチェックしています。ネストされたパターンを使用すると、複数行のコードを記述することなく、長方形の左上と右下の点の x 座標と y 座標にアクセスできます。
結論として、Java 21 にパターン マッチングとレコード (JEP 406) が追加されたことで、複雑なオブジェクトからデータを処理および抽出する方法が大幅に改善されました。この機能によりコードが大幅に簡素化され、より読みやすく簡潔になります。また、パターン一致が失敗する可能性がある失敗シナリオの処理にも役立ちます。これらの変更により、Java 21 では引き続きコードがより合理化され、Java 開発者の開発エクスペリエンスが向上します。
MyExamCloud の Java SE 21 Developer Professional Practice Tests で Java 21 スキルをアップグレードしてください。 Java 21 エキスパートになるための知識を開発し、テストしてください。
以上がJava 開発者が知っておくべき Java のパターン マッチングと変更の記録の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











一部のアプリケーションが適切に機能しないようにする会社のセキュリティソフトウェアのトラブルシューティングとソリューション。多くの企業は、内部ネットワークセキュリティを確保するためにセキュリティソフトウェアを展開します。 ...

多くのアプリケーションシナリオでソートを実装するために名前を数値に変換するソリューションでは、ユーザーはグループ、特に1つでソートする必要がある場合があります...

システムドッキングでのフィールドマッピング処理は、システムドッキングを実行する際に難しい問題に遭遇することがよくあります。システムのインターフェイスフィールドを効果的にマッピングする方法A ...

intellijideaultimatiateバージョンを使用してスプリングを開始します...

データベース操作にMyBatis-Plusまたはその他のORMフレームワークを使用する場合、エンティティクラスの属性名に基づいてクエリ条件を構築する必要があることがよくあります。あなたが毎回手動で...

Javaオブジェクトと配列の変換:リスクの詳細な議論と鋳造タイプ変換の正しい方法多くのJava初心者は、オブジェクトのアレイへの変換に遭遇します...

Redisキャッシュソリューションは、製品ランキングリストの要件をどのように実現しますか?開発プロセス中に、多くの場合、ランキングの要件に対処する必要があります。

eコマースプラットフォーム上のSKUおよびSPUテーブルの設計の詳細な説明この記事では、eコマースプラットフォームでのSKUとSPUのデータベース設計の問題、特にユーザー定義の販売を扱う方法について説明します。
