Das JDK 1.5: Vorschau auf die wichtigsten Neuigkeiten

Codename: Tiger

Andreas Holubek

Selten wurde eine neue Java-Version von der Community so gespannt erwartet wie die kommende. Nach jahrelanger Konkurrenzlosigkeit muss ein zukünftiges Java sich in einem erstarkten Microsoft C#- und .NET-Umfeld bewähren. Da ist es sicherlich nicht verwunderlich, wenn bei der kommenden Version – Codename: Tiger – die Usability des Java-Systems im Vordergrund steht und nicht, wie häufig in der Vergangenheit, lediglich dessen Performance.

Überblick

Gerade auf Grund dieser Ausrichtung entsteht eine Menge an interessanten Aspekten. Einige davon wie Enumerations als Sprachmittel waren in solch einer Form bisher nicht denkbar. Aber bei aller Euphorie, eine kleine Warnung am Anfang muss sein: Alle hier vorgestellten Erweiterungen, Ideen und Konzepte sind noch nicht endgültig verabschiedet. Das eine oder andere Sprachmittel wird sicherlich noch geändert oder ganz entfernt werden. Auf der anderen Seite wird bestimmt noch viel Interessantes hinzukommen. Auch der Zeitplan “ Herbst 2003 “ ist eher als unscharf zu bezeichnen. Betrachtet man jedoch die Zeitabstände der vorherigen Versionen, kann in diesem Jahr noch mit der ersten Version gerechnet werden.

Trotz der Entwicklung, die unabhängig von uns oder vom einzelnen erfolgt, sollte aber auf keinem Fall der Java Community Process vergessen werden. Jeder “ und natürlich auch Sie als Leser “ haben die Möglichkeit, für bestimmte Features und Entwicklungen zu votieren. Nicht zuletzt entscheiden die Votes, ob und in welchem Zeitraum ein Feature eingebaut oder ein Fehler beseitigt wird. Probieren Sie es doch einfach mal aus – es gibt auch heute schon viele Möglichkeiten, sich an der Idee Java 1.x zu beteiligen!

In unserem Beitrag werden wir uns einige ausgesuchte, mögliche Bestandteile einer neuen Java-Version etwas genauer anschauen. Wenn Sie mehr über ein spezielles Feature wissen wollen oder einfach nur Up-To-Date bleiben wollen, ist die Adresse des Java Community Process‘ (JCP) [1] der beste Anlaufpunkt.

J2SE 1.5 (Tiger) Release Contents (176)

Der Anlaufpunkt für Informationen ist der offizielle JSR 176. Hier wird definitiv festgelegt, was in die neue Version hineinkommt bzw. wie der Status der Features ist. Da es sich um eine sehr frühe Version handelt, ist noch Spielraum offen. In Tabelle 1 sind die derzeitigen Bestandteile eines möglichen Tiger Release dargestellt. Einige APIs wie XML, JDBC oder JMX sind konsequente Weiterentwicklungen bestehender Systeme. Andere wie zum Beispiel 200 (Network Transfer Format for Java Archives) oder auch 202 (Java Class File Specification Update) bringen die Erfahrungen aus der Arbeit vieler Entwickler in die Java-Welt hinein.

JSR Inhalt
174 Monitoring and Management Specification for the Java Virtual Machine
176 J2SETM 1.5 (Tiger) Release Contents
003 Java Management Extensions (JMX) Specification
013 Decimal Arithmetic Enhancement
014 Add Generic Types to the Java Programming Language
101 Java APIs for XML RPC
105 XML Digital Signature APIs
106 XML Digital Encryption APIs
114 JDBC Rowset Implementations
121 Application Isolation API Specification
163 Java Platform Profiling Architecture
203 More New I/O APIs for the Java Platform (NIO.2)
199 Java Compiler API
200 Network Transfer Format for Java Archives
201 Extending the Java Programming Language with Enumerations, Autoboxing, Enhanced for loops and Static Import
202 Java Class File Specification Update

Ein weiteres interessantes Feature stellen die Enumerations dar. Dieses Sprachmittel wird bis jetzt über verschiedene Implementierungen auf Klassenebene gelöst. Jedoch gibt es hierbei oft Einbußen in der Performance und es muss häufig derselbe Code geschrieben werden. Soll es nach den Vorstellungen des JSR 201 gehen, werden wir mit dem Tiger Release ein neues Schlüsselwort, ähnlich interface oder class bekommen:

public enum Coin {
penny(1), nickel(5), dime(10), quarter(25);
Coin(int value) { this.value = value; }
private final int value;
public int value() { return value; }
}

oder etwas einfacher:

public enum Season { winter, spring, summer, fall }

Davon ausgehend sind verschiedene Erweiterungen angedacht. So soll es abstrakte Methoden geben, welche von jedem einzelnen Enumeration-Element implementiert werden können. Die aus Enumerations als integriertes Sprachmittel entstehenden Vorteile sind sehr weitreichend. So lässt sich eine sehr hohe Performance erreichen, Stacktraces können endlich Klartext-Informationen enthalten, switch-Statements sind wieder nutzbar und nicht zuletzt bleibt die Compile Time-Sicherheit für den Quellcode erhalten.

Autoboxing (201)

Wer hat sich nicht schon über den immer wiederkehrenden Code zum Konvertieren eines primitiven Typs (z.B. boolean, int, short) in die entsprechende Wrapper-Klasse (Boolean, Integer, Short) oder zurück geärgert? Diese unnötigen Konvertierungen sollen der Vergangenheit angehören. Der Compiler der Zukunft wird diese Übersetzungen für uns vornehmen. So wird es zum Beispiel im Quellcode möglich sein, auch in einer Collection primitive Datentypen zu nutzen:

ArrayList lst = new ArrayList();

lst.add(42);
lst.add(true); . . .

Eine weitere Erleichterung der Programmierung bei gleichzeitiger Verbesserung der Lesbarkeit von Quellcode soll durch statische Imports ermöglicht werden. Hierbei werden statische Methoden und Konstanten direkt importiert und können ohne vorangestellte Typangabe genutzt werden. Mit heutigen Mitteln lässt sich ein derartiges Verhalten nur sehr schwer erreichen. Schauen wir uns einmal ein mögliches Beispiel an. Anstatt die mathematischen Funktionen jedes Mal mit vorangestellter Klassenangabe zu versehen, könnte man diese sehr viel einfacher im Quellcode nutzen:

import static java.lang.Math.*;

. . .
double d = abs(4.2d);
// früher: d = Math.abs(4.2d);
. . .

Natürlich lassen sich auf die gleiche Weise auch Konstanten (static final int BLUE = 42) importieren und nutzen und in Zusammenhang mit Enumerations sind die Vorzüge kaum abzusehen.

Einfachere Loops (201)

Ein weiterer Schritt in Richtung Vereinfachung des Java-Codes wird durch eine erweiterte Semantik für Loops definiert. Für Iterationen über Java Collections muss heute noch der folgende Code geschrieben werden:

for (Iterator i = c.iterator(); i.hasNext(); )
{
String s = (String) i.next();
...
}

Mit Einführung der Generics (JSR 14) wird es zwar etwas einfacher werden, das Programm enthält aber immer noch einen hohen Anteil an gleichem Code. Dieser ist für den Programmfluss und das Verständnis eigentlich nicht notwendig:

// wenn JSR-14 (Generics) in das Tiger Relase aufgenommen wird
for (Iterator i = c.iterator(); i.hasNext(); )
{
String s = i.next();
...
}

Mit dem JSR-201 wird sich der Quellcode auf die notwendigen Teile reduzieren:

// wenn JSR-14 und JSR-201 in das Tiger Release aufgenommen wird
for (String s : c)
{
// s enthält automatisch das jeweils gültige Element
...
}

Nach einigen Jahren Java ist es immer wieder erstaunlich, dass kommende Versionen noch mit vielen interessanten Details und Neuerungen aufwarten können. Nicht zuletzt liegt dies natürlich in der Community begründet. Es wird immer wichtig bleiben, wie diese Community hinter dem Java-System steht. Zugegeben, einige der Neurungen waren für viele längst überfällig, man denke hier nur an die Enumerations oder Templates. Puristen werden die Abkehr von der Einfachheit der ersten Zeit dagegen wohl eher vermissen. Java war von jeher eine Sprache mit wenigen Sprachmitteln, sehr einfach und dadurch in vielen Fällen sehr mächtig. Zusammenfassend möchte ich den jetzigen Trend doch begrüßen, bringt er doch vielfältige neue Möglichkeiten.

Kein Fazit ohne Kritik; einige wichtige Dinge bleiben bis heute unangetastet. Was passiert zum Beispiel mit dem großen Komplex Versionierung? Es wird immer schwieriger große Java-Systeme konsistent zu halten. Etablierte Konzepte wie Plugin-Techniken, erweiterbare Software und Java-Programme, die mittlerweile Jahre am Markt sind, erfordern eine Koexistenz alter und neuer APIs, Frameworks, JDKs und Module. Eine Lösung ist jedoch leider noch nicht in Sicht. Genau so problematisch wie am Anfang von Java ist immer noch die Installation und Wartung. Hier spielt der Hoffnungsträger Web Start noch nicht alle seine Fähigkeiten aus. Es wäre schön, wenn es noch ein einheitliches Installations-API gäbe.

Alles in allem ist die kommende Java-Version jedoch wieder etwas, auf das man sich so richtig freuen kann, und wenn der eine oder andere Kritikpunkt mit diesem Release noch nicht aus dem Weg geräumt werden wird, bleibt immerhin noch etwas für die weitere Zukunft zu tun.

Links und Literatur

Geschrieben von
Andreas Holubek
Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.