Was Entwickler mit Java 8 erwartet

Seite 4: Ausprobieren, Zukunft und Fazit

Inhaltsverzeichnis

Java 8 erweitert die in Java 5 eingeführten Annotationen: Bisher konnten Annotationen nur für Klassen, Methoden, Felder und Variablen verwendet werden. Ab Java 8 lassen sich auch alle anderen Java-Typen durch Metainformationen ergänzen, zum Beispiel generische Typen, Arrays, Casting-Operatoren oder throws-Ausdrücke.

// Annotationen für generische Typen
Map<@NonNull String, @NonEmpty List<String>> mymap;

Rund um Annotationen gibt es noch mehr Änderungen: Eine Annotation lässt sich nun mehrfach auf ein Element anwenden (zum Beispiel @Author("name1") @Author("name2")). Außerdem wurde die Liste der vordefinierten Annotationen um @FunctionalInterface erweitert: sie ist zur Kennzeichnung funktionaler Schnittstellen gedacht. Dabei handelt es sich um solche mit nur einer abstrakten Methode. Wenn diese Annotation verwendet wird, überprüft der Compiler, ob die Regeln für funktionale Schnittstellen erfüllt sind.

Mit Java 8 wird die in Enterprise- bzw. Server-Anwendungen mitunter eingesetzte JavaScript-Engine Rhino durch die vollkommen neue Implementierung Nashorn ersetzt. Nashorn soll JavaScript-Code wesentlich schneller ausführen und gleichzeitig sparsamer mit dem Speicherplatz umgehen.

Das Framework JavaFX wird mit Java 8 in das JDK integriert, was den Versionssprung von JavaFX 2.2 auf JavaFX 8 begründet. Auch inhaltlich hat sich einiges getan: zu den wichtigsten Neuerungen zählen 3D-Funktionen, Klassen zur Auswertung von Sensoren, wie sie auf Smartphones häufig zu finden sind, bessere Möglichkeiten zur Textformatierung und zum Ausdruck formatierter Dokumente, das neue TreeTableView-Steuerelement sowie eine verbesserte HTML5-Unterstützung.

In die Rubrik "nützliche Kleinigkeiten" lässt sich die neue Methode parallelSort der Arrays-Klasse einordnen. Sie ist symptomatisch für diverse andere Detailverbesserungen, die Oracle an der Java-Standardbibliothek vorgenommen hat – etwa die Unterstützung von Unicode 6.2, die Implementierung besserer Verschlüsselungsalgorithmen und sicherere Zufallszahlen etc. Jede Verbesserung ist für sich kaum der Rede wert, in Summe machen sie die Arbeit mit Java aber produktiver und die resultierenden Programme – zumindest in manchen Fällen – schneller.

Mit der Fertigstellung des Milestone 7 Ende Mai 2013 ist Java 8 Feature-komplett. Der weitere Zeitplan sieht im September 2013 eine Developer Preview, im Oktober den API/Interface Freeze und im Januar 2014 einen Final Release Candidate vor. Wirklich fertig soll Java 8 dann im März 2014 sein. Die vielfachen Verzögerungen haben nicht zuletzt damit zu tun, dass große Teile des Java-Entwickler-Teams seit Monaten damit beschäftigt sind, immer neue Sicherheitsprobleme in älteren Java-Versionen zu beheben.

Entwickler können den Großteil der neuen Features schon jetzt ausprobieren und wöchentlich neue Early-Access-Testversionen (Builds) von der JDK8-Website herunterladen. Um Konflikte mit vorhandenen Java-Installationen aus dem Weg zu gehen, empfiehlt es sich, die Installation in einer virtuellen Maschine durchzuführen.

java -version 
java version "1.8.0-ea"
Java(TM) SE Runtime Environment (build 1.8.0-ea-b92)
Java HotSpot(TM) 64-Bit Server VM (build 25.0-b34, mixed mode)

Auf den Komfort von Eclipse müssen Entwickler bei ihren Tests allerdings verzichten, denn auch die aktuelle Eclipse-Version Kepler ist nicht Java-8-kompatibel. Das liegt daran, dass Eclipse nicht auf den mit dem JDK mitgelieferten Compiler javac zurückgreift, sondern einen eigenen verwendet – und der versteht die Lambda-Syntax noch nicht. NetBeans-Fans haben es besser – für diese IDE existiert bereits eine recht brauchbare Lamba-kompatible Testversion. Und nicht nur das: Der NetBeans-Editor hilft sogar dabei, anonyme Klassen auf Knopfdruck in Lambda-Ausdrücke umzuwandeln.

Es gibt bereits eine Lambda-kompatible Testversion von NetBeans.


Seit Jahren reden Java-Entwickler über die bessere Modularisierung von Java-Programmen und -Bibliotheken. Ein Ziel des der Diskussion zugrundeliegenden Projekts Jigsaw ist es, Java-Programme mit einer minimalen Runtime-Umgebung ausliefern zu können, die wirklich nur die Klassen enthält, die vom Programm tatsächlich genutzt werden.

Obwohl das Projekt Jigsaw weit fortgeschritten ist und ursprünglich als wesentliches Feature von Java 7 (!) gedacht war, musste seine Fertigstellung nun neuerlich verschoben werden – auf die Java-Version 9, für die es noch nicht einmal einen konkreten Zeitplan gibt.

Daneben hat Oracle auf der JavaOne 2012 recht vage einige weitere Ziele für Java 9 formuliert, unter anderem die Fertigstellung einer selbst-optimierenden Java Virtual Machine, die Unterstützung von Tail Calls (also den effizienten Aufruf einer Methode am Ende einer anderen Methode) sowie die bessere Nutzung von Grafikkarten zum Durchführen aufwendiger Berechnungen (OpenJDK-Projekt Sumatra). Wie die Erfahrungen mit Java 7 und 8 gezeigt haben, hat diese Zielvorgabe einen ähnlichen Wert wie ein Brief an das Christkind; welche Features Java 9 tatsächlich bieten wird, werden wir erst in einigen Jahren wissen.

Java 8 ist wie jedes andere Software-Produkt von Kompromissen geprägt. Viele Java-Entwickler hätten sich in Java 8 noch mehr Features gewünscht. Doch auch mit den verbliebenen Neuerungen kann man Java 8 durchaus als revolutionäre Version bezeichnen, die die Programmierung in Java mindestens ebenso stark verändern wird, wie die in Java 5 eingeführten Generics. Lambda-Ausdrücke und ihre Einbettung an verschiedenen Orten in der Standardbibliothek eröffnen vollkommen neue Wege, um Algorithmen mit einfachen Mitteln besser zu parallelisieren.

Michael Kofler
ist freier Computerbuchautor und Lehrbeauftrager an der Fachhochschule Kapfenberg. Er hat kürzlich ein E-Book zur Java-Syntax veröffentlicht.


Literatur:

(jul)