ホームページ Java &#&チュートリアル Java 開発者が知っておくべき Java のパターン マッチングと変更の記録

Java 開発者が知っておくべき Java のパターン マッチングと変更の記録

Aug 12, 2024 am 06:47 AM

Pattern Matching and Records Changes in Java  Every Java Developer Must Know

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 サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? 会社のセキュリティソフトウェアはアプリケーションの実行に失敗していますか?それをトラブルシューティングと解決する方法は? Apr 19, 2025 pm 04:51 PM

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

名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? 名前を数値に変換してソートを実装し、グループの一貫性を維持するにはどうすればよいですか? Apr 19, 2025 pm 11:30 PM

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

MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? MapsTructを使用したシステムドッキングのフィールドマッピングの問題を簡素化する方法は? Apr 19, 2025 pm 06:21 PM

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

Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Intellijのアイデアは、ログを出力せずにSpring Bootプロジェクトのポート番号をどのように識別しますか? Apr 19, 2025 pm 11:45 PM

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

エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? エンティティクラス変数名をエレガントに取得して、データベースクエリ条件を構築する方法は? Apr 19, 2025 pm 11:42 PM

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

Javaオブジェクトを配列に安全に変換する方法は? Javaオブジェクトを配列に安全に変換する方法は? Apr 19, 2025 pm 11:33 PM

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

Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Redisキャッシュソリューションを使用して、製品ランキングリストの要件を効率的に実現する方法は? Apr 19, 2025 pm 11:36 PM

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

eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? eコマースプラットフォームSKUおよびSPUデータベースデザイン:ユーザー定義の属性と原因のない製品の両方を考慮する方法は? Apr 19, 2025 pm 11:27 PM

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

See all articles