Das Java Development Kit verbessert unter anderem die Möglichkeiten zum Pattern Matching in Switch-Konstrukten und enthält einen einfachen Webserver. Letztgenannter soll allerdings primär nur beim Testen und Debuggen helfen.
Der Simple Web Server kommt als Kommandozeilenwerkzeug „jwebserver“. Der Server und das zugehörige API gehören zum Package „com.sun.net.httpserver“ des „jdk.httpserver“-Moduls.
Der UTF-8-Zeichensatz kommt jetzt standardmäßig in den Standard-Java-APIs zum Einsatz. Insbesondere liefert „java.nio.charset.Charset#defaultCharset()“ ab sofort „UTF-8“ zurück. Mit dem Umstieg möchten die Java-Entwickler unter anderem die Portabilität verbessern.
Pattern Matching in Switch-Ausdrücken und -Statements gab es schon in Form einer ersten Preview in Java 17. Damit lassen sich beispielsweise alle Integerzahlen abfangen:
switch (o) {
case Integer i -> String.format("Zahl: %d", i);
...
}
In Java 18 haben die Entwickler dieses Pattern Matching leicht angepasst: Ab sofort müssen die „case“-Label eine vorgegebene Reihenfolge einhalten. Im Einzelnen müssen konstante Label immer vor den sogenannten Guarded Pattern Labels stehen. Denen wiederum müssen die Non-Guarded Type Pattern folgen. Das zugehörige Java Enhancement Proposal (JEP) 420 nennt dazu folgendes Beispiel:
switch(o) {
case -1, 1 -> ... // Special cases
case Integer i && i > 0 -> ... // Positive integer cases
case Integer i -> ... // All the remaining integers
default ->
}
Am Anfang stehen die Spezialfälle, die nachfolgenden „case“-Label prüfen immer allgemeinere Muster. Das soll nicht nur die Lesbarkeit verbessern, sondern auch Sonderfälle ausschließen, in denen ein „case“-Label in den meisten Fällen zutrifft und so nachfolgende Fälle (versehentlich) dominiert.
Neben diesen Anpassungen soll in Java 18 das Exhaustiveness Checking penibler arbeiten. Dabei prüft der Compiler, ob das Switch-Konstrukt alle möglichen Werte der Selector Expression in „switch()“ abdeckt. Insbesondere müssen Java-Entwickler das bei allen Pattern und Null sicherstellen, die nicht die Legacy-Typen verwenden (wie int, String, etc.). Darüber hinaus arbeitet das Exhaustiveness Checking präziser bei Ssealed Hierarchies.
Eine ausführliche Erklärung aller Neuerungen beim Pattern Matching liefert der JEP 420. Das Pattern Matching gilt allerdings weiterhin als Preview, Entwickler sollten das Feature folglich mit Bedacht einsetzen.
Alle weiteren Änderungen finden sich kompakt in den Release Notes. Unter anderem kennt JavaDoc das neue „@snippet“-Tag, das die Einbindung von Beispiel-Code in die API-Dokumentation vereinfachen soll. Verbesserungen gab es auch an der Vector API.
Java 18 beziehungsweise die Implementierung OpenJDK 18 gehören nicht zu den Long Term Releases. Die Entwickler pflegen es folglich nur bis zur nächsten Version, die turnusgemäß in einem halben Jahr erscheinen soll.





