Henning Schwentner Workplace Solutions

Das wichtigste Feature von Java 9 ist ganz klar das Modulkonzept von Jigsaw. Davon profitieren werden vor allem große Projekte und solche, bei denen der Speicherbedarf eine Rolle spielt.

Im März 2017 soll Java in Version 9 erscheinen. In diesem Artikel schauen wir auf die Features, die für dieses neue Release geplant sind: das Modulkonzept von Projekt Jigsaw, die REPL JShell, die Unterstützung für HTTP2, Compact Strings und noch einiges mehr.

Mit Version 8 hat Java eine Menge neuer Features bekommen, von denen sicherlich die Unterstützung von Lambdas die weitesten Kreise gezogen hat. Aber auch die dadurch möglichen Bulk Operations auf Collections und das neue Date-Time-API verbessern das tägliche Leben des Java-Entwicklers. Ein lange gewünschtes Feature hat es allerdings nicht mehr in Java 8 geschafft und soll nun das Markenzeichen der kommenden Version 9 werden – die Modularisierung mit Project Jigsaw.

Project Jisaw soll zwei Probleme angehen, unter denen Java bisher leidet, die JAR-Hölle und das Fehlen eines starken Kapselungsmechanismus oberhalb von Klassen. Von Anfang hatte Java ein Package-Konstrukt. Eine Klasse kann innerhalb eines Pakets eine von zwei Sichtbarkeiten haben. Entweder sie ist public, dann kann von überall auf die Klasse zugegriffen werden. Wenn sie nicht public ist, kann nur von innerhalb des Packages auf sie zugegriffen werden. Aber Packages können nicht geschachtelt werden. Das führt dazu, dass man entweder unstrukturierte große „Big Ball of Mud“-Pakete hat oder solche, die nur aus öffentlichen Klassen bestehen. JARs (Java Archives) wiederum sind nur eine Menge von komprimierten Class-Dateien plus Daten. Sie sind keine Komponenten und bieten keine Kapselung. Deshalb haben sie auch keine Schnittstelle oder besser gesagt ist die Schnittstelle eines JARs alles, was das JAR enthält. Denn es kann ja wegen fehlender Kapselung nichts vor dem Zugriff von außen verstecken. Mit Version 9 erhält Java die Möglichkeit, Module zu definieren. Ein Modul ist eine benannte, selbstbeschreibende Programmkomponente, die aus einem oder mehreren Paketen (und Daten) besteht. Module lassen sich wie in Listing 1 definieren.

module de.modul.a {
  exports de.modul.a.paket.x;
}
module de.modul.b {
  exports de.modul.a.paket.y;
  exports de.modul.a.paket.z;
}
module de.modul.c {
  requires de.modul.a;
  requires de.modul.b;
}

Mit dieser Schnittstellendefinition wird bekanntgegeben, welche Packages ein Modul nach außen anbietet (mit dem Schlüsselwort exports) und welche Module es von außen benötigt (mit dem Schlüsselwort requires). Achtung: Das ist kein Tippfehler im vorherigen Satz; ein Modul exportiert Packages, benötigt aber Module. Das kann auf den ersten Blick verwirrend sein, da Pakete und Module per Konvention gleiche oder sehr ähnliche Namen haben. Alle Pakete eines Moduls, die nicht explizit exportiert werden, lassen sich nur innerhalb des Moduls verwenden. Wird versucht von außerhalb des Moduls auf sie zuzugreifen, kommt es zu einem Compilerfehler.

Den vollständigen Artikel lesen Sie in der Ausgabe:

Java Magazin 7.16 - "SMACK: Die neue Generation Big Data"

Alle Infos zum Heft
246865Features in Java 9
X
- Gib Deinen Standort ein -
- or -