cherezoff - stock.adobe.com

Fünf Funktionen in Java 17, die Entwickler kennen sollten

Die neue Version Java 17 enthält viele interessante Funktionen für Entwickler. Hier sind fünf Feature, die den Umstieg von Java 11 LTS zu JDK 17 lohnend machen.

Programmierer wollen bei der Entwicklung von Anwendungen in der Regel ein bestimmtes, langfristig unterstütztes Release einsetzen. Bei Java bedeutet dies, dass sich die meisten Entwickler in den letzten Jahren auf die Funktionen von Java 8 oder Java 11 beschränkt haben.

Seit Herbst 2021 ist eine neue LTS-Java-Version verfügbar, an der Entwickler nicht vorbeikommen. Hier sind die fünf wichtigsten Funktionen von Java 17, die Entwickler schätzen werden, wenn sie von einer älteren Version der Java-Plattform umsteigen:

  1. der neue Datentyp Java Record
  2. Java-Textblöcke
  3. die NullPointerException-Anleitung
  4. Ausdrücke für Switch-Anweisungen
  5. versiegelte Klassen.

Java Records

Ein Kritikpunkt an der Programmiersprache Java ist ihre unnötige Ausführlichkeit – insbesondere im Vergleich zu anderen Programmiersprachen wie Python oder Groovy. Der neue Datentyp Java Record will diese Kritik aus der Welt schaffen.

Oftmals repräsentiert eine Java-Klasse einfach nur Daten. In einer Klasse für Datenübertragung sind keine Methoden erforderlich, die Klasse muss keine zukünftige Erweiterbarkeit unterstützen und die Daten sind für die gesamte Lebensdauer des Objekts unveränderlich.

Java Record entspricht diesen Idealen. Seine Implementierung verwendet eine präzise und prägnante Syntax:

record Point(long x, long y) { }

Ein Record ist implizit final, sein Zustand ist unveränderlich, er kann nicht erweitert werden und er kann keine Instanzinitialisierungen enthalten. Java Record schafft eine lesbarere und verständlichere Syntax, während gleichzeitig der unveränderliche Zustand der JVM ermöglicht, Effizienzsteigerungen zu implementieren, die es Programmen erlauben, signifikante Listenverarbeitungen schneller durchzuführen, was Java-Anwendungen linearer skalierbar macht. Der Datentyp Java Record ist damit eine interessante neue Ergänzung der Java-Sprache.

Java-Textblöcke

Java war noch nie stolz auf seine Fähigkeit zur String-Manipulation. Früher war die einfache Aufgabe, formatierten Text in einem Java-Programm hart zu kodieren, schwierig. Der Grund dafür ist, dass für diese Prozedur String-Terminatoren, Verkettungen und Escape-Sequenzen erforderlich waren, die das Lesen und Schreiben von Text, der in ein Java-Programm eingebettet ist, erschwerten.

In Java 17 können Sie jetzt jedoch Textblöcke verwenden, die die Nutzung von Text in einem Java-Programm natürlicher machen. Vergleichen Sie anhand des folgenden Beispiels einen traditionellen Textblock, der in ein Java-Programm eingebettet ist, mit der neuen Textblock-Funktion von Java 17.

Vor Java 17 sah der Textblock wie folgt aus:

String oldTextBlock = "<html>\n" +

              "    <body>\n" +

              "        <em>Cool LTS Java 17 Features</em>\n" +

              "    </body>\n" +

              "</html>\n";

Jetzt sieht es folgendermaßen aus:

String newTextBlock = """

              <html>

                  <body>

                      <em>Cool LTS Java 17 Features</em>\

                  </body>

              </html>

              """;

Dieses Feature stellt eine deutliche Verbesserung der Benutzerfreundlichkeit im Vergleich zu früheren Versionen dar.

Hilfreiche NullPointerException-Anleitung

Die Fehlersuche bei Java-Anwendungen läuft in der Regel auf einen mühsamen Scan des Systemprotokolls hinaus und eine zeitaufwändige Analyse der darin enthaltenen Laufzeitausnahmen.

Ein Verweis auf ein null-Objekt ist ein häufiger Auslöser, der ein ansonsten gut geschriebenes Programm zum Absturz bringt. Leider geben die Java-Protokolle nur selten Aufschluss darüber, um welches Objekt es sich handelt oder auf welche Eigenschaft das Programm beim Auslösen der NullPointException verwiesen hat.

Im Java 17 LTS-Release können Entwickler die Vorteile der neuen NullPointerException-Anleitungsfunktion nutzen. Dieses Feature verbessert die Nutzbarkeit des Stacktrace einer Ausnahme, indem es den genauen Namen der Variablen protokolliert, die null war.

Switch-Ausdrücke

Java-Switch-Ausdrücke eignen sich hervorragend für komplexe bedingte Logik, aber der Flood-Gate-Ansatz für die Fallverarbeitung ist nicht intuitiv. Dieses Manko kann herkömmliche Switch-Ausdrücke fehleranfällig machen.

switch (playersPerSide) {

    case ONE, TWO -> System.out.println("Tennis");

    case THREE, FIVE -> System.out.println("Basketball");

    case SIX -> System.out.println("Hockey");

    case ELEVEN -> System.out.println(8);

}

Die neuen Pfeil-Labels des Switch-Ausdrucks eliminieren die Fall-Through-Funktionalität, wodurch Switch-Anweisungen einfacher zu lesen, zu schreiben und zu debuggen sind. Außerdem wird die Ablauflogik einer Switch-Anweisung für junge Programmierer intuitiver.

Versiegelte Klassen

Vererbung ist ein mächtiges Konstrukt. Es gibt jedoch nur sehr wenige Kontrollpunkte für die Java-Syntax, die das Potenzial für vererbungsbasierte, objektorientierte Korruption einschränken. Die versiegelte Java-Klasse hilft, den übereifrigen und oft schädlichen Missbrauch der Java-Vererbung einzudämmen.

Mit versiegelten Klassen kann ein Entwickler explizit die Namen der Komponenten deklarieren, die legal von einer von ihm erstellten Klasse erben können. Die unelegante Verwendung eines Zugriffsmodifikators ist nicht mehr die einzige Möglichkeit, die Verwendung einer Oberklasse einzuschränken.

public abstract sealed class Shape

            permits Annulus, Squircle, Triquetra { }

Der Schlüssel zur versiegelten Klasse ist die Verwendung der Wörter sealed und permits in der Klassendeklaration.

Die Version Java 17 LTS stellt eine Weiterentwicklung der Java-Sprache dar. Es gibt keine großen Änderungen an der Syntax oder Funktionalität der Sprache. Verfügbar sind aber viele kleine Verbesserungen, die Java-Entwicklern gefallen werden und die dazu beitragen werden, dass Java die beste Programmiersprache zum Programmieren bleibt.

Abbildung 1: Java bietet einige nützliche Funktionen für Entwickler.
Abbildung 1: Java bietet einige nützliche Funktionen für Entwickler.

Erfahren Sie mehr über Softwareentwicklung