Angelika Langer Selbstständig

Es gibt Bedenken gegenüber dem Aufwand, den es kosten wird, größere Anwendungen zu modularisieren.

Klaus Kreft Selbstständig

Mit dem Release 9 bekommt Java nun endlich das schon lange angekündigte Modulsystem

Wir wollen Ihnen in dieser Artikelreihe einen Überblick über die Neuerung in Java 9 verschaffen und einige Features von Java 9 kurz erläutern. Dabei haben wir diejenigen Themen ausgewählt, von denen wir denken, dass sie für Java-Entwickler am interessantesten sind. Und natürlich werfen wir einen Blick auf die größte Neuerung: das Modulsystem.

Collection Literals: von Java 7 nach 9

Für Java 7 hatte Sun damals die Java-Community gefragt, welche kleineren Ergänzungen an der Programmiersprache nützlich wären. Im Rahmen des sogenannten Project Coin wurden die Vorschläge gesammelt und zum Teil für Java 7 umgesetzt. Damals sind Features wie try-with-resources, switch-over-string und multi-catches dazu gekommen. Es wurden aber nicht alle Vorschläge berücksichtigt. Eine der Ideen, die liegen geblieben ist, ist die der sogenannten Collection Literals. Dabei geht es um eine kompakte Syntax für das Erzeugen von unveränderlichen Collections mit einigen wenigen Elementen. Der damalige Vorschlag sah so aus:

List list = #[ 1, 2, 3 ];

Für Java 9 hat man sich nun eine Lösung überlegt. Allerdings ist dafür nicht die Sprache geändert worden. Die oben gezeigte Syntax gibt es nicht. Stattdessen hat man eine Lösung in der Bibliothek gefunden. In den Interfaces List, Set und Map wird es statische Factory-Methoden für das Erzeugen von unveränderlichen Collections geben. Das sieht dann z. B. so aus:

List list = List.of( 1, 2, 3 );

Ähnliche Factory-Methoden gibt es bereits in der Klasse Collections:

// alt:
List noElement    = Collections.emptyList();
List oneElement   = Collections.singletonList("a");
// neu:
List someElements = List.of("a", "b", "c");

Die neuen Factory-Methoden fügen sich also ganz natürlich in die bestehenden APIs ein.

Diamond-Operator darf an anonyme Klassen

Es gibt eine Reihe kleinerer Spracherweiterungen, die so geringfügig sind, dass sie kaum wahrnehmbar sind. Dazu gehören der Diamond-Operator an anonymen Klassen, private Interfacemethoden, Underscore als Bezeichner und Effectively-final-Variablen in try-with Resources. Der sogenannte Diamond-Operator wurde mit Java 7 eingeführt. Er erspart dem Entwickler bei der Initialisierung eines Objekts von einem parametrisierten Typ etwas Schreibarbeit: Man darf beim Konstruktoraufruf leere spitze Klammern verwenden – eben den Diamond-Operator. Das sieht so aus:

List list = new ArrayList<>();      // fine

Leider durfte man den Diamond-Operator aber nicht bei anonymen Klassen verwenden. Das nachfolgende Beispiel hat zu einer Fehlermeldung beim Kompilieren geführt:

Callable task = new Callable<>() { // error in Java 7; fine in Java 9
  public Long call() { return 42L; }
};

Diese Fehlermeldung wird man in Java 9 nicht mehr bekommen. Der Diamond-Operator ist jetzt auch bei anonymen Klassen erlaubt.

Java 9 – Überblick

  • Teil 1: Ergänzungen der Sprache und der existierenden APIs
  • Teil 2: JVM Internals
  • Teil 3: Neue und alte JDK-Tools
  • Teil 4: Project Jigsaw aka Java Module System
  • Teil 5: JDK-interne Packages wie sun.misc.* und deren Ersatz
  • Teil 6: Concurrency Updates

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 10.17 - "Java 9"

Alle Infos zum Heft
579810703Die Highlights von Java 9
X
- Gib Deinen Standort ein -
- or -