Java 레코드 패턴 및 패턴 일치 탐색

WBOY
풀어 주다: 2024-08-17 19:04:31
원래의
684명이 탐색했습니다.

Exploring Java Record Patterns and Pattern Matching

Java-Datensatzmuster wurden in Java 16 als Teil des Projekts Amber eingeführt und werden in Java 21 durch die Hinzufügung von Dekonstruktoren und Mustervergleich erweitert. Diese Funktion ermöglicht eine präzisere und flexiblere Art der Datenverarbeitung in Java-Anwendungen. In diesem Tutorial behandeln wir das Konzept von Datensatzmustern, wie sie beim Mustervergleich helfen, und verschiedene Codierungsbeispiele.

1. Kurze Zusammenfassung von Java Records
Bevor wir uns mit Datensatzmustern befassen, werfen wir einen kurzen Rückblick auf Java-Datensätze. Datensätze wurden in Java 14 als neuer Klassentyp eingeführt, der speziell für die Speicherung unveränderlicher Daten entwickelt wurde. Sie machen das Schreiben von Boilerplate-Code überflüssig, indem sie eine präzisere Syntax zum Definieren von Klassen mit Daten bereitstellen. Im folgenden Beispiel definieren wir einen Datensatz namens „Person“ mit drei Feldern: Vorname, Nachname und Alter.

record Person(String firstName, String lastName, int age) {}

Da Datensätze unveränderlich sind, schränken sie bestimmte Eigenschaften ein:

  • Alle Felder sind endgültig
  • Der Kurs ist implizit endgültig
  • Die Deklaration von Instanzfeldern ist verboten

Records generieren automatisch einen Konstruktor und Getter-Methoden für jedes Feld, wodurch sie besser für Datenträger geeignet sind als herkömmliche Klassen.

2. Was sind Aufnahmemuster?
Datensatzmuster, die in Java 21 eingeführt wurden, kombinieren das Konzept von Mustern mit Datensätzen, was eine einfache Dekonstruierung und Extraktion von Werten aus Datensätzen ermöglicht. Ein Datensatzmuster besteht aus einem Datensatzklassentyp und optionalen Mustervariablen, denen nur dann Werte zugewiesen werden, die aus dem Zieldatensatz extrahiert werden, wenn der Test erfolgreich ist.

Der Nullwert stimmt mit keinem Datensatzmuster überein, daher werden die Mustervariablen in diesem Fall nicht initialisiert.

3. Rekordzerstörer
Ein Destruktor ist die Umkehrung eines Konstruktors. Es extrahiert Werte aus einem Objekt, anstatt sie hinzuzufügen. Im Zusammenhang mit Datensätzen wird ein Destruktor als „Dekonstruktor“ bezeichnet. Es ermöglicht die Zerlegung von Datensatzwerten in ihre einzelnen Bestandteile. Angenommen, wir haben einen Datensatz mit dem Namen „Name“ mit den folgenden Feldern:

record Customer(String firstName, String lastName, int age) {}

Wir können einen Dekonstruktor verwenden, um die Werte dieser Felder aus einer Instanz des Datensatzes „Kunde“ zu extrahieren, wie im folgenden Beispiel gezeigt:

Kunde Kunde = neuer Kunde("Jane", "Smith", 30);

if (Kundeninstanz von Customer(String firstName, String lastName, int age)) {
System.out.println("Vorname: " + Vorname); // Jane
System.out.println("Nachname: " + Nachname); // Smith
System.out.println("Alter: " + Alter); // 30
}

Datensatzstrukturen können in Situationen nützlich sein, in denen wir mehrere verwandte Werte als ein einzelnes Objekt speichern und abrufen müssen. Die Dekonstruktionsfunktion von Datensätzen ermöglicht es uns, diese Werte einfach zu extrahieren und in unserem Code zu verwenden.

4. Zeichnen Sie Muster in Switch-Anweisungen auf
Mit Java 16 wurde der Mustervergleich für „instanceof“-Anweisungen eingeführt, der in Java 21 um „switch“-Anweisungen erweitert wurde. Es ermöglicht einen prägnanteren und lesbareren Code bei gleichzeitiger Verarbeitung mehrerer Muster.

Angenommen, wir haben einen Datensatz namens „Konto“ mit drei Untertypen: „SavingAccount“, „CreditCardAccount“ und „HomeLoanAccount“. Jeder Untertyp hat eine andere Methode zur Berechnung seines Gleichgewichts. Wir können das Datensatzmuster in einer Switch-Anweisung verwenden, um diese drei Fälle zu behandeln, wie unten gezeigt:

Schnittstellenkonto {}
Datensatz SavingAccount (doppelter Saldo) implementiert Konto {}
Datensatz CreditCardAccount(double creditLimit, double used) implementiert Konto {}
record HomeLoanAccount(double totalAmount, double amountPaid) implementiert Konto {}

Kontokonto= neues CreditCardAccount(10000, 1000);

Schalter (Form) {
case SavingAccount s:
System.out.println("Kontostand ist " + Kontostand);
Pause;
Fall CreditCardAccount c:
System.out.println("Credit Balance is: " + (creditLimit-used));
Pause;
Fall HomeLoanAccount h:
System.out.println("Balence " +(totalAmount-amountPaid));
Pause;
Standard:
System.out.println("Unbekanntes Konto");
}

5. Verschachtelte Muster
Zusätzlich zum Extrahieren von Werten aus einem einzelnen Datensatz können Datensatzmuster auch verschachtelt werden, um komplexere Datensätze zu verarbeiten. Nehmen wir an, wir haben einen Datensatz mit dem Namen „Konto“, der ein Feld vom Typ „Kunde“ und ein weiteres Feld vom Typ „Adresse“ enthält. Wir können verschachtelte Datensatzmuster verwenden, um die Werte aus diesen beiden Feldern zu extrahieren, wie im folgenden Beispiel gezeigt:

record Customer(String firstName, String lastName, int age) {}

Konto aufzeichnen (Kundenkunde, Adressadresse) {}

고객 고객 = 신규 고객("John", "Doe", 25);
주소 주소 = 새 주소("123 Main St.","City", "State");
계정 계정 = 새 계정(고객, 주소);

if (계정 인스턴스of Account(고객(f이름, 이름, 나이), 주소(거리, 도시, 주))) {
System.out.println("이름: " + fName); // 존
System.out.println("성: " + lName); // 되
System.out.println("나이: " + 나이); // 25
System.out.println("주소: " + 거리 + ", " + 도시 + ", " + 주); // 123 Main St., 시, 주
}

이 예에서는 두 개의 중첩 패턴을 사용하여 "계정" 레코드의 "고객" 및 "주소" 필드에서 값을 추출합니다.

6. 구성 요소 일치
레코드 패턴을 사용하면 패턴 변수가 레코드의 구성 요소 이름과 일치할 필요가 없으므로 더 많은 유연성을 얻을 수 있습니다. 호환되는 한 패턴 일치는 성공합니다. 예:

record Customer(String firstName, String lastName, int age) {}

기록 계정(고객 고객, 주소 주소) {}

고객 고객 = 신규 고객("John", "Doe", 25);

if (고객 인스턴스of 고객(var fn, var ln, var age)) {
System.out.println("이름: " + fn); // 존
System.out.println("성: " + ln); // 되
System.out.println("나이: " + 나이); // 25
}

// 중첩된 레코드 구성 요소에 액세스
계정 계정 = 새 계정(고객, 새 주소("123 Main St", "New York", "NY"));
if (account 인스턴스of Account(var cust, var 주소)) {
System.out.println("고객: " + 고객); // 고객[firstName=John, lastName=Doe, age=25]
System.out.println("주소: " + 주소); // 주소[street=123 Main St, city=New York, state=NY]
}

여기서 패턴 변수 "fn" 및 "ln"은 "Customer" 레코드의 "fName" 및 "lName"에 해당하는 구성 요소 이름과 다릅니다. 이는 레코드 패턴을 더욱 유연하게 만들고 변수 이름과의 잠재적인 충돌을 방지합니다.

7. 결론
결론적으로, Java 레코드 패턴은 레코드를 분해하고 레코드에서 값을 추출하는 편리한 방법을 제공합니다. 인스턴스 오브 및 스위치 문에서 패턴 일치를 처리하는 동안 코드를 더 간결하고 명확하며 읽기 쉽게 만듭니다. 레코드 소멸자와 결합된 레코드 패턴을 사용하면 복잡한 레코드를 더욱 강력하게 처리할 수 있습니다. 전반적으로 이 기능은 데이터 매체로서 레코드의 사용을 향상시키고 Java 프로그래밍을 더욱 즐겁게 만듭니다.

개발자는 MyExamCloud의 1Z0-830 연습 시험을 사용하여 SE 21 Developer Certified Professional 시험을 공부함으로써 더 많은 Java 21 기능을 발견할 수 있습니다.

위 내용은 Java 레코드 패턴 및 패턴 일치 탐색의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!