Ausblick
Die Punkte, die in diesem Abschnitt dargestellt werden, sind teilweise schon in nicht-LTS-Versionen veröffentlicht worden, weshalb man sicher sein kann, dass sie in der nächsten LTS-Version Java 21 enthalten sein werden. Zudem sind auch Features enthalten, die bisher nur als Preview verfügbar sind oder noch nur als Proposal vorliegen. Deswegen ist es hier kaum möglich konkrete Code-Beispiele zu zeigen und wo sie gezeigt werden, ist die Syntax bislang vorläufig.
UTF-8 by Default
Ab Java 18 ist UTF-8 das Standard-Charset. Zuvor war das Standard-Charset abhängig von der Umgebung, in der die Anwendung lief. Hierdurch sollen Operationen, die vom Charset beeinflusst werden, unabhängiger und nachvollziehbarer werden.
Simple Web Server
Ab Java 18 wird ein einfacher Webserver mitgeliefert, der statische Dateien bereitstellen kann. Hiermit soll das Testen vereinfacht werden.
Pattern Matching for switch
Die oben genannten Verbesserungen von Switch-Blöcken sollen noch weitergeführt werden. Es soll ermöglicht werden, die switch-Variable auf mehr als feste Werte zu vergleichen. Angedacht sind u.a. Vergleiche auf Typ, null-Wert, sowie spezifische Bedingungen (case String s when s.length() == 1).
Record Patterns
Die oben genannten Verbesserungen von instanceof-Vergleichen sollen record-Klassen in besonderer Weise unterstützen, offensichtlich angelehnt an das Object Destructuring von z.B. JavaScript:
record Point(int x, int y) {}
void printSum(Object o) {
if (o instanceof Point(int x, int y)) {
System.out.println(x+y);
}
}
Value Types
Value Types sollen es Programmierern erlauben, eigene Value Objekte zu definieren, die sich analog zu primitiven Datentypen verhalten. Die Felder dieser Klassen sind immer final und zwei Instanzen sind genau dann gleich, wenn ihre Felder gleich sind. Diese Änderung soll es einfacher machen, leichtgewichtige Objekte zu definieren.
Virtual Threads
Bisher sind Java Threads ein 1-zu-1 Mapping zu OS-Threads. Dies limitiert die Anwendung, insbesondere wenn es sich um eine Server-Anwendung handelt, die jedem Request einen Thread zuweist. Virtual Threads, sollen deswegen das 1-zu-1 Mapping zu OS-Threads aufbrechen. Im Hintergrund sorgt die Java Runtime dafür, dass mit einem Virtual Thread nur dann ein OS-Thread besetzt wird, wenn auch tatsächlich Berechnungen ausgeführt werden.