Java im Jahr 2019

Java 12 und darüber hinaus: Wichtige Features der kommenden Sprachversionen

Michael Inden

© Shutterstock / Profit_Image

Java 12 steht in den Startlöchern, die Rampdown-Phase hat vor Weihnachten bereits begonnen. Damit sind alle Features, die in der neuen Version des JDKs enthalten sein werden, festgelegt. Java-Experte Michael Inden hat sich für uns bereits zwei Features angeschaut, die in Java 12 bzw. einer der darauf folgenden Sprachversionen enthalten sein werden: Switch Expressions und Raw String Literals.

Michael Inden hat bereits die Highlights von Java 9 in seiner Artikelserie Java 9 – Eine Einführung vorgestellt, in der Serie Best of Java 10 ging er auf die Neuerungen in Java 10 ein. Seine Artikelserie Java 11 – eine Einführung setzte sich aus Texten zusammen, die auch Teil seines neuen Buches zu Java 10/11 sein werden, das beim dpunkt.verlag erscheinen wird. Im vorliegenden Artikel wirft er einen kleinen Blick darauf, was das Jahr 2019 für die Programmiersprache Java (voraussichtlich) in petto haben wird.

Bei Oracle folgt man mittlerweile der Strategie, Java in kleinen, aber feinen Iterationen um nützliche Funktionalität zu ergänzen und auch bei der Syntax zu modernisieren. Zwei diesbezüglich nette Erweiterungen, die in den kommenden Java-Versionen kommen werden, sind:

  • Switch Expressions
  • Raw String Literals

Beide Neuerungen stelle ich anhand von Beispielen vor. Diese sind stark an diejenigen aus den jeweiligen JEPs angelehnt (https://openjdk.java.net/jeps/325 und https://openjdk.java.net/jeps/326).

Switch Expressions

Java verharrte bislang beim switch-case-Konstrukt sehr bei den uralten Wurzeln aus der Anfangszeit der Programmiersprache und den Kompromissen im Sprachdesign, die C++-Entwicklern den Umstieg erleichtern sollten. Relikte wie das break und das Fall Through, sollte break fehlen, waren wenig intuitiv und luden geradezu zu Fehlern ein. Zudem war man beim case recht eingeschränkt bei der Angabe der Werte.

Das alles ändert sich glücklicherweise mit Java 12. Dazu wird die Syntax leicht verändert und erlaubt nun die Angabe einer Expression sowie mehrerer Werte beim case. Auf diese Weise lassen sich Fallunterscheidungen deutlich eleganter formulieren. Das ist für eine Abbildung von Wochentagen auf deren Länge nachfolgend gut ersichtlich:

DayOfWeek day = DayOfWeek.FRIDAY;

int numLetters = switch (day) {
    case MONDAY, FRIDAY, SUNDAY -> 6;
    case TUESDAY -> 7;
    case THURSDAY, SATURDAY -> 8;
    case WEDNESDAY -> 9;
};

System.out.println("Anzhal Buchstaben: " + numLetters);

Raw String Literals

Diese Syntaxerweiterung bringt eine langersehnte Erweiterung, nämlich mehrzeilige Strings ohne mühselige Verknüpfungen definieren zu können. Besser noch, man kann auch auf ein fehlerträchtiges Escaping verzichten. Das ist komfortabel und erleichtert unter anderem den Umgang mit SQL-Befehlen, Windows-Pfadangaben und regulären Ausdrücken oder der Definition von JavaScript in Java-Sourcecode. Ursprünglich war das Feature für Java 12 geplant, nun wurde es allerdings doch verschoben, damit Nachbesserungen implementiert werden können. Schauen wir uns dennoch einmal zwei Beispiele nach dem aktuellen Stand der Dinge an:

Runtime.getRuntime().exec(‘"C:\Program Files\SomeProgram.exe"‘);

final String javaScriptCode = ‘function hello() {
            print("Hello World");
        }

        hello();‘;

System.out.println("Script: " + javaScriptCode);

Welch eine elegante Schreibweise! Im Gegensatz dazu hätte man mit Java 10 ziemlich viel Escaping verwenden sowie die New Lines in den String integrieren müssen:

Runtime.getRuntime().exec("\"C:\\Program Files\\SomeProgram.exe\"");

String javaScriptCodeOld = "function hello() {\n" +
        " print(\"Hello World\");\n" +
        "}\n" +
        "\n" +
        "hello();\n";

System.out.println("Script: " + javaScriptCode);

Nutzen wir aus, dass die JavaScript Engine Nashorn noch ins JDK integriert ist und schreiben folgenden Java Sourcecode:

System.out.println("Script: " + javaScriptCodeOld);

var scriptEngineManager = new ScriptEngineManager();
var jsEngine = scriptEngineManager.getEngineByExtension("js");
jsEngine.eval(javaScriptCodeOld);

Dann erhält man diese Ausgaben:

Script: function hello() {
    print("Hello World");
}

hello();
Warning: Nashorn engine is planned to be removed from a future JDK release
Hello World

Fazit

Schon diese beiden Features bringen einen Mehrwert und erhöhen die Vorfreude auf Java 12 und darüber hinaus. Getrübt wird das Ganze ein wenig durch die Ankündigung seitens Oracles, die JavaScript-Engine aus dem JDK entfernen zu wollen.

Der Weg zum Java-Profi

Michael Indens Buch bietet eine umfassende Einführung in die professionelle Java-Entwicklung und vermittelt Ihnen das notwendige Wissen, um stabile und erweiterbare Softwaresysteme auf Java-SE-Basis zu bauen. Praxisnahe Beispiele helfen dabei, das Gelernte rasch umzusetzen. Neben der Praxis wird viel Wert auf das Verständnis zugrunde liegender Konzepte gelegt.

Die Neuauflage wurde durchgehend überarbeitet, aktualisiert und erweitert. Auch Java 9 sind zwei Kapitel gewidmet. Eine neue Auflage des Buches mit Erweiterungen für aktuellere Java-Versionen ist für den Sommer bzw. Herbst 2019 geplant.

Weitere Informationenen zum Buch gibt es hier!

Geschrieben von
Michael Inden
Michael Inden
Dipl.-Inform. Michael Inden ist Oracle-zertifizierter Java-Entwickler für JDK 6. Nach seinem Studium in Oldenburg war er lange Zeit als Softwareentwickler und -architekt bei verschiedenen internationalen Firmen tätig und arbeitet derzeit als Teamleiter Softwareentwicklung in Zürich. Michael Inden hat rund 20 Jahre Erfahrung beim Entwurf komplexer Softwaresysteme gesammelt, an diversen Fortbildungen und an mehreren Java-One-Konferenzen in San Francisco teilgenommen. Sein Wissen gibt er gerne als Trainer in Schulungen und auf Konferenzen weiter. Sein besonderes Interesse gilt dem Design qualitativ hochwertiger Applikationen mit ergonomischen, grafischen Oberflächen sowie dem Coaching von Kollegen.
Kommentare

Hinterlasse einen Kommentar

3 Kommentare auf "Java 12 und darüber hinaus: Wichtige Features der kommenden Sprachversionen"

avatar
4000
  Subscribe  
Benachrichtige mich zu:
benneq
Gast

Habt ihr nicht gestern noch publiziert, dass es keine Raw String Literals in Java 12 geben soll?

Dominik Mohilo
Mitglied

Hallo benneq,

darum steht da ja auch: „Ursprünglich war das Feature für Java 12 geplant, nun wurde es allerdings doch verschoben, damit Nachbesserungen implementiert werden können.“, „die in Java 12 bzw. einer der darauf folgenden Sprachversionen enthalten sein werden: Switch Expressions und Raw String Literals“ und „Vorfreude auf Java 12 und darüber hinaus“ 😉

Liebe Grüße,
Dominik

Martin
Gast

Trotzdem ist das ziemlich verwirrend…