Durch die Einführung von Java-Datensätzen steht Entwicklern eine neue Datenstruktur zur Verfügung, die die Handhabung und Erstellung von Datenobjekten vereinfacht. Mit der neuesten Ergänzung von Datensatzmustern und verschachtelten Mustern ist die Datensatzverarbeitung noch effizienter und dynamischer geworden.
Beginnen wir mit der Betrachtung der Grundlagen – ein Datensatz ist eine einfache Alternative zu herkömmlichen Klassen, die als transparenter Träger für Daten mit integrierten Zugriffsmethoden dient. Sein Hauptzweck besteht darin, Daten zu speichern und nicht komplexe Verhaltensweisen zu implementieren.
Mit der Einführung von Datensatzmustern in Java 21 wurde jedoch die traditionelle Instanz-von-und-Cast-Sprache vereinfacht. Anstatt zu prüfen, ob ein Objekt eine Instanz einer bestimmten Datensatzklasse ist, und es dann so umzuwandeln, dass seine Komponenten verwendet werden, können wir jetzt ein Datensatzmuster verwenden, um beide Schritte zu kombinieren. Anstatt beispielsweise Folgendes zu schreiben:
if (obj instanceof String) { String name = (String)obj; ... use name ... } In Java 21, we can simply write: if (obj instanceof String name) { ... use name ... }
Dadurch wird der Code prägnanter und weniger fehleranfällig, da das Typmuster String s zum Abgleich mit dem Wert von obj verwendet wird und die Mustervariable s auf den Wert von obj initialisiert wird, der in String umgewandelt wurde.
Darüber hinaus führt Java 21 auch verschachtelte Muster ein, die den Abgleich und die Zerlegung komplexerer Objektdiagramme, wie z. B. verschachtelter Datensätze, ermöglichen. Nehmen wir an, wir haben die folgenden Deklarationen:
Record BankAccount(String accountNumber, String accountHolder, double balance) {} Record Transaction(String transactionId, double amount, String type, String timestamp) {} Record BankStatement(Listtransactions, BankAccount account) {}
Wir können jetzt ein verschachteltes Datensatzmuster verwenden, um den gesamten Transaktionsbetrag aus einem BankStatement-Objekt wie folgt zu berechnen:
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; }
In diesem Beispiel enthält das äußere Muster BankStatement(Listtransaktionen, BankAccount-Konto) ein verschachteltes Muster BankAccount-Konto, das verwendet wird, um die Kontokomponente aus dem Datensatz BankStatement zu extrahieren. Dies ermöglicht einen prägnanteren und effizienteren Code, da wir nicht jede einzelne Untermusterübereinstimmung separat behandeln müssen.
Eine weitere nützliche Funktion von Datensatzmustern ist die Typinferenz. Wenn ein Datensatzmuster eine generische Datensatzklasse benennt, ohne Typargumente bereitzustellen, leitet der Compiler bei Verwendung des Musters automatisch die Typargumente ab. Dies vereinfacht den Code, wie im folgenden Beispiel gezeigt:
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); ... } }
Diese Funktion wird auch mit verschachtelten Datensatzmustern unterstützt, wodurch der Code noch prägnanter und lesbarer wird.
Schließlich sind Datensatzmuster vollständig in Switch-Ausdrücke und -Anweisungen in Java 21 integriert. Es ist jedoch wichtig zu beachten, dass der Switch-Block bei der Verwendung von Datensatzmustern in Switch-Anweisungen vollständig sein muss. Das bedeutet, dass alle möglichen Werte des Selektorausdrucks im Schalterblock berücksichtigt werden müssen. Bei Datensatzmustern wird dies durch die Analyse der verwendeten Mustertypen ermittelt. Beispielsweise stimmt die Fallbezeichnung „Case Bar b“ mit Werten vom Typ „Bar“ und allen möglichen Untertypen von „Bar“ überein.
Zusammenfassend lässt sich sagen, dass das Verständnis und die Beherrschung der Datensatzmuster in Java 21 für jeden, der sich auf die Java SE 21-Entwicklerzertifizierung vorbereitet, von entscheidender Bedeutung ist. Diese neuen Funktionen ermöglichen eine optimierte und effizientere Datensatzverarbeitung und machen sie zu einer unverzichtbaren Fähigkeit für Java-Entwickler.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3