top of page
nicolasmerz

Ein tiefgehender Blick auf nützliche Lösungen im neuen Java 21 Update


Java 21 markiert einen bedeutenden Meilenstein in der Entwicklung von Java, indem es neue Funktionen und Verbesserungen einführt, die die Art und Weise, wie Entwickler Anwendungen schreiben und warten, revolutionieren. In diesem Artikel werden wir tief in einige der nützlichsten neuen Funktionen und Verbesserungen eintauchen, die Java 21 bietet, und Ihnen zeigen, wie Sie diese in Ihren Projekten nutzen können.


Java 21


1. Pattern Matching for Switch (Finalized) in Java

Eine der spannendsten Neuerungen in Java 21 ist die Finalisierung von Pattern Matching für switch-Ausdrücke. Diese Funktion ermöglicht es Ihnen, den Typ eines Objekts innerhalb eines switch-Blocks abzufragen und gleichzeitig Variablen zu binden, was den Code klarer und weniger fehleranfällig macht.



Beispiel:

public class PatternMatchingSwitchDemo {
    public static void main(String[] args) {
        Object obj = "Hello, Java 21!";
        
        switch (obj) {
            case String s -> System.out.println("It's a string: " + s);
            case Integer i -> System.out.println("It's an integer: " + i);
            case Double d -> System.out.println("It's a double: " + d);
            default -> System.out.println("Unknown type");
        }
    }
}

Erklärung: Hier wird das switch-Statement verwendet, um den Typ des Objekts obj zu prüfen. Wenn obj eine String-Instanz ist, wird der String gebunden und direkt im Ausdruck verwendet. Dies vereinfacht den Code erheblich und reduziert die Notwendigkeit für mehrere instanceof-Prüfungen.


2. Record Patterns (Preview)


Java 21 führt Record Patterns in der Vorschau ein, was es ermöglicht, komplexe Datenstrukturen in einem einfachen und lesbaren Muster zu extrahieren. Dies ist besonders nützlich bei der Arbeit mit Record-Typen, die bereits in Java 14 eingeführt wurden.


Beispiel:

public record Person(String name, int age) {}

public class RecordPatternDemo {
    public static void main(String[] args) {
        Object obj = new Person("Alice", 30);
        
        switch (obj) {
            case Person(String name, int age) -> 
                System.out.println("Name: " + name + ", Age: " + age);
            default -> 
                System.out.println("Not a Person");
        }
    }
}

3. String Templates (Preview)


Java 21 führt auch eine Vorschau auf String-Templates ein, die es ermöglichen, komplexe String-Konstruktionen sicherer und effizienter zu gestalten. String-Templates bieten eine Möglichkeit, Ausdrücke in Strings zu interpolieren und gleichzeitig Typsicherheit zu gewährleisten.


Beispiel:

public class StringTemplateDemo {
    public static void main(String[] args) {
        int x = 10;
        int y = 20;
        String result = STR."The sum of \{x} and \{y} is \{x + y}";
        System.out.println(result);
    }
}

Erklärung: In diesem Beispiel zeigt das STR-Keyword die Verwendung von String-Templates, bei denen Variablen und Ausdrücke in den String eingebettet werden. Diese neue Funktion macht das Erstellen dynamischer Strings sicherer, da es die Möglichkeit von Fehlern wie fehlenden oder unpassenden Typen reduziert.


4. Sequenced Collections


Java 21 führt die SequencedCollection-Schnittstelle ein, die es Sammlungen ermöglicht, sich wie sequenzielle Listen zu verhalten, was nützlich ist, wenn die Reihenfolge der Elemente von Bedeutung ist. Diese Schnittstelle erweitert die Möglichkeiten der Java-Collections-API.


Beispiel:

import java.util.SequencedCollection;
import java.util.ArrayList;

public class SequencedCollectionDemo {
    public static void main(String[] args) {
        SequencedCollection<String> seqCollection = new ArrayList<>();
        seqCollection.add("One");
        seqCollection.add("Two");
        seqCollection.add("Three");
        
        System.out.println(seqCollection.getFirst()); // "One"
        System.out.println(seqCollection.getLast());  // "Three"
    }
}

Erklärung: SequencedCollection ermöglicht es Ihnen, auf das erste und letzte Element der Sammlung direkt zuzugreifen, was besonders nützlich in Algorithmen ist, bei denen die Reihenfolge der Elemente eine Rolle spielt.


5. Virtual Threads (Preview)


Java 21 bringt auch eine bedeutende Verbesserung im Bereich der Multithreading-Programmierung mit der Einführung von Virtual Threads (in der Vorschau). Virtual Threads, auch als Projekt Loom bekannt, zielen darauf ab, die Skalierbarkeit und Effizienz von Thread-basierten Anwendungen drastisch zu verbessern, indem sie leichtgewichtige Threads zur Verfügung stellen.


Beispiel:

public class VirtualThreadDemo {
    public static void main(String[] args) throws InterruptedException {
        Thread vt = Thread.ofVirtual().start(() -> {
            System.out.println("Hello from a virtual thread!");
        });
        
        vt.join(); // Warten, bis der virtuelle Thread abgeschlossen ist
    }
}

Erklärung: Virtual Threads sind eine leistungsstarke neue Möglichkeit, um Tausende von Threads zu erstellen, ohne die typischen Overhead-Kosten von Plattform-Threads. Dies ist besonders nützlich für I/O-intensive Anwendungen oder Dienste mit hoher Parallelität.


6. Scoped Values (Preview)


Eine weitere Vorschaufunktion in Java 21 ist Scoped Values, die eine alternative Möglichkeit bieten, Daten durch den Code zu reichen, insbesondere in parallelen Umgebungen. Dies ist besonders nützlich, wenn man Daten sicher und ohne Nebenwirkungen zwischen Threads teilen möchte.


Beispiel:

import java.util.concurrent.Executors;
import jdk.incubator.concurrent.ScopedValue;

public class ScopedValuesDemo {
    static final ScopedValue<String> USER = ScopedValue.newInstance();
    
    public static void main(String[] args) {
        var executor = Executors.newVirtualThreadPerTaskExecutor();
        
        try {
            ScopedValue.where(USER, "Alice").run(() -> {
                System.out.println("User: " + USER.get()); // Outputs: Alice
                executor.submit(() -> {
                    System.out.println("User in thread: " + USER.get()); // Outputs: Alice
                }).join();
            });
        } catch (InterruptedException e) {
            e.printStackTrace();
        } finally {
            executor.shutdown();
        }
    }
}

Erklärung: Scoped Values bieten eine sichere Möglichkeit, Kontextinformationen durch den Code zu leiten, insbesondere wenn mehrere Threads beteiligt sind. Dies ist eine Alternative zur Verwendung von ThreadLocal, jedoch sicherer und einfacher in parallelen Szenarien zu verwenden.


Fazit


Java 21 bringt eine Vielzahl von Verbesserungen und neuen Funktionen, die die Effizienz und Lesbarkeit Ihres Codes erheblich verbessern können. Von der Vereinfachung von switch-Ausdrücken mit Pattern Matching über die Einführung von String Templates und Virtual Threads bis hin zu Scoped Values und Sequenced Collections – jede dieser Funktionen zielt darauf ab, die Entwicklung moderner Java-Anwendungen einfacher, sicherer und leistungsfähiger zu gestalten.


Nutzen Sie die Gelegenheit, Java 21 zu erkunden und experimentieren Sie mit diesen neuen Werkzeugen in Ihren Projekten – sie könnten der Schlüssel sein, um Ihre nächste Anwendung auf das nächste Level zu heben.

7 Ansichten0 Kommentare

Comentarios


bottom of page