© Uthai pr/Shutterstock.com
Ein Ausblick auf die für September geplante JDK-Version 15

Mach die 15


Vor dem Update und nach dem Update ist oft der gleiche Zustand. Was im Bereich der Embedded-Software und beim Design von Platinen seit Jahren gilt, ist auch für Java-Programmierer mittlerweile Teil des Alltags. Für September 2020 wird die finale Auslieferung von Java 15 erwartet. Erfreulicherweise gibt es schon jetzt Möglichkeiten, um sich die neuen Funktionen näher anzusehen. Wie man das unter Windows bewerkstelligt und auf welche Lustigkeiten sich Java-Entwickler in der nächsten Zeit einstellen dürfen, klärt dieser Artikel.

Spätestens seit den Lizenzquerelen um die offizielle Java-Arbeitsumgebung aus dem Hause Oracle haben alternative Java-Distributionen wie Azul an Popularität gewonnen. Auch wenn dem so ist, wollen wir in den folgenden Schritten mit der offiziellen Version arbeiten. Da das manuelle Kompilieren einer Java-Ausführungsumgebung auch auf einer Achtkernworkstation in Arbeit ausartet, besuchen wir im ersten Schritt die offizielle Webseite zu Java 15 [1]. Umfangreichere Dokumentation zu den einzelnen Verbesserungsideen – der Autor denkt hier insbesondere an den Rohtext der eigentlichen JEPs – findet man derweil beim Projekt OpenJDK [2].

Die Downloadwebseite bietet, wie in Abbildung 1 gezeigt, eine Gruppe von Binärdateien an – wer wie wir unter Windows arbeitet, entscheidet sich für den zip-Link, um eine Datei mit einem nach dem Schema openjdk-15-ea+30_windows-x64_bin.zip gebildeten Namen auf die Workstation zu laden. Entpacken Sie das Archiv danach an einen bequem zugänglichen Ort im Dateisystem – der Autor wird in den folgenden Schritten mit dem Pfad C:\Users\tamha\Downloads\ arbeiten.

hanna_java15_1.tif_fmt1.jpgAbb. 1: Diese spröde gestaltete Webseite erspart uns Kompilationsarbeit

Dienstalte Java-Anwender vermissen an dieser Stelle Binärdateien für Solaris und diverse auf der SPARC-Architektur laufende Betriebssysteme. Dabei handelt es sich um eine absichtliche Einschränkung – mit der in JEP 381 vorgeschlagenen Entfernung dieser heute nur noch wenig genutzten Architekturen beweist Oracle Mut zur Lücke. Sinn der Maßnahme ist das Streamlining des Entwicklungsprozesses – muss man weniger Architekturen unterstützen, ist es einfacher, auf die Bedürfnisse der individuellen Chips einzugehen. Lohn der Mühen ist eine ganz an die alte Zeit erinnernde Arbeitsumgebung, die unter anderem eine Runtime und einen Compiler bereitstellt. Wer javac zur Selbstreflexion animiert, bekommt folgende Antwort:

C:\Users\tamha\Downloads\jdk-15\bin>javac -version javac 15-ea

Wer diese Kommandozeilen-Toolchain in eine IDE seiner Wahl integrieren möchte, muss darauf achten, dass die Verwendung moderner Teile der Syntax derzeit noch eine Gruppe zusätzlicher Flags voraussetzt – fehlen sie, wirft der Compiler den in Abbildung 2 gezeigten Fehler. Zur Vermeidung dieses Zusatzaufwands wird der Autor deshalb auf Kommandozeilenebene arbeiten.

hanna_java15_2.tif_fmt1.jpgAbb. 2: Die Verwendung der Preview-Funktionen erfordert eine Extraeinladung bei der Kompilation

Versiegelte Klassen

Kann man das Motto des C++-Standards als objektorientiertes „Free for all“ bezeichnen, so stand der Java-Sprachstandard seit jeher für eine gesittetere Implementierung der Paradigmata der objektorientierten Programmierung. Mit Sealed Classes, deren genaue Implementierung übrigens in JEP 360 beschrieben ist, bekommen Entwickler ein weiteres Werkzeug zur Einschränkung des OOP-Wildwuchses an die Hand. Dahinter steht der Gedanke, dass eine sealed-Klasse – anders als ihre mit final ausgestattete Kollegin – zwar durch Vererbung verändert werden kann, dieses Recht aber nur bestimmten, vom Entwickler der Basisklasse festzulegenden Klassen zusteht.

Zur Demonstration der Möglichkeiten benötigen wir insgesamt drei Klassen, die der Autor gern im Rahmen des Anwerfens von Visual Studio Code initialisiert:

C:\Users\tamha\Downloads\jdk-15\bin>code TamsTest.java TamsWorker.java BattasWorker.java

Microsoft spendiert seiner abgespeckten IDE einen Launcher, der das für den Aufruf verwendete Terminalfenster sofort an den Entwickler zurückgibt – Sie müssen also nicht, wie beispielsweise mit gedit, mehrere Terminalfenster öffnen. Im ersten Schritt können wir den Aufbau der TamsTest-Klasse festlegen:

public sealed class TamsTest permits TamsWorker { }

Diese an sich leere Klasse zeichnet sich dadurch aus, dass ihre Deklaration das mit Java 15 neu eingeführte permits-Schlüsselwort enthält. Damit weisen wir eine Gruppe von Klassen zu, die zur Vererbung berechtigt sind – hier wäre das die Klasse TamsWorker, die nach folgendem Schema eine Ableitungsbeziehung anweist:

public non-sealed class TamsWorker extends TamsTest { }

Zur Vorführung des Verhaltens benötigen wir dann noch eine weitere Klasse, die zwar eine Ableitungsbeziehung eingeht, dazu aber nicht berechtigt ist:

public class BattasWorker extends TamsTest { }

Wer das vorliegende Programm durch Eingabe von javac --enable-preview --release 15 TamsTest.java BattasWorker.java in Kombination von TamsTest und ...

Neugierig geworden? Wir haben diese Angebote für dich:

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang