Closures kommen mit Version 7 des JDK

Zu früh gejammert: Closures doch in Java 7

Nach der Verkündung von Mark Reinhold auf der Devoxx 2008, dass Closures nicht in Java 7 enthalten sind, hat sich nach vielen Diskussionen die Java-Gemeinde damit langsam zurechtgefunden. So richtig Ruhe ist aber bei diesem Thema nie eingekehrt. Der unerwartete Höhepunkt war wieder einmal die Devoxx, dieses Mal in der Fassung 2009. Hier hat Mark Reinhold nun unter Scheinwerferlicht die Rolle rückwärts verübt und verkündet, dass Closures doch in Java 7 enthalten sind. Grund genug, wieder den Scheinwerfer auf dieses Thema zu werfen.

Zum Jahresende hat die Java-Gemeinde wahrscheinlich nicht mehr mit einem Paukenschlag gerechnet, aber auch dieses Jahr wurden wir eines Besseren belehrt. Mit der Verkündung, dass Closures in Java 7 enthalten sind, war auch sofort klar, dass dies Auswirkungen auf das geplante Veröffentlichungsda

tum von Java 7 (Anfang 2010 war angepeilt) haben wird. Nach kurzer Zeit hat sich Mark Reinhold dazu geäußert: September 2010 ist anvisiert. Ein Blick auf den aktuellen Releasekalender von Java 7 bestätigt das.

Was kommt auf den Java-Entwickler zu?

Aus der Sicht der Entwicklung sind die Funktionalität und auch die Syntax wichtig. Hierzu gibt es noch keine definitive Aussage. Für einen Eindruck lohnt sich aber ein Blick auf die vorhandenen Vorschläge:

  • CICE (Concise Instance Creation Expressions), Verfasser: Bob Lee, Doug Lea und Josh Bloch
  • BGGA 0.5 (Bracha, Gafter, Gosling, Ahé), Verfasser: Gilad Bracha, Neal Gafter, James Gosling, Peter von der Ahé
  • FCM 0.5 (First Class Methods), Verfasser: Stephen Colebourne, Stefan Schulz
  • CFJ 0.6a (Closures for Java), Verfasser: Neal Gafter

Mark Reinhold hat in einem Blogeintrag die Anforderungen an Closures in Java zusammengefasst. Insgesamt reduziert Reinhold die Anforderungen auf folgende vier elementare Punkte:

  • Syntax
  • Funktionstypen
  • Closure Conversion
  • Extension Methods

Mit Syntax meint Reinhold ein Mittel, um Closures innerhalb der Sprache von Java auszudrücken. Um Closures in Java einzubetten, werden innerhalb des Typsystems Funktionen als Typen benötigt. Mit der Closure Conversion ist gemeint, dass an einer Stelle, an der ein Interface mit einer Methode oder eine abstrakte Klasse mit einer Methode benötigt wird, auch ein Closure verwendet werden kann. Der letzte Punkt sind Extension Methods. Hier geht es darum, eine Möglichkeit zu schaffen, vorhandene Interfaces um Methoden zu erweitern, ohne die Rückwärtskompatibilität zu beeinträchtigen. Ein Einsatzgebiet ist vor allem die Collections-API. In seiner Erläuterung führt Reinhold die ParallelArray-API auf.

Zwischenzeitlich existiert nun auch ein Projekt, um Vorschläge auszuarbeiten und einen Prototypen zu erstellen. Der Name: Project Lambda. Ein erster Entwurf von Mark Reinhold für Closures ist bereits online. Die Syntax ähnelt dabei sehr dem FCM-Entwurf von Stephen Colebourne und Stefan Schulz. Drei kurze Beispiele sollen einen ersten Eindruck dieser Syntax vermitteln. Im folgenden Beispiel wird der Text „Hello Closures!“ zurückgegeben:

#()("Hello Closures!") 

Im nächsten Beispiel ist eine Funktion beschrieben, die einen Parameter vom Typ long als Eingabewert besitzt:

#(long y)(y + y) 

Das letzte Beispiel zeigt die Implementierung von Runnable. Einmal mit den Bordmitteln von Java SE 6 und einmal mit dem Vorschlag von Mark Reinhold:

//Direkte Implementierung mit den Möglichkeiten aus Java SE 6 Thread th = new Thread(new Runnable() { public void run() { executeMethodOne(); executeMethodTwo(); } }); //Implementierung mit dem Vorschlag von Mark Reinhold Thread th = new Thread(#(){ executeMethodOne(); executeMethodTwo(); } 
Kommt noch etwas dazu?

Durch die Verschiebung von Java 7 sind die Spekulationen um weitere Neuerungen im kommenden Release entbrannt. Erste Anlaufstelle hierfür ist das Project Coin. In diesem Projekt wird festgehalten, welche Sprachänderungen in Java 7 einfließen werden. Der aktuelle Stand kann online eingesehen werden. Nach der Verkündung, dass Java 7 verschoben wird, hat sich nun auch Joe Darcy, der Projectlead von Coin, zu diesem Thema geäußert. Nach seiner Aussage bleibt die kommunizierte Liste unverändert. Lediglich der Vorschlag „Improved Exception Handling for Java“wird nochmals geprüft. Hierbei geht es darum, dass in einer Catch Clause auch mehrere Exceptions gefangen werden können.

Warum nicht gleich?

Nachdem wir uns nun Anfang des Jahres vom Thema „Closures in Java 7“ verabschiedet haben, steht es also doch wieder vor der Tür. Klar kann man sich die Frage stellen, was der tatsächliche Grund für diesen Sinneswandel ist, dass deswegen das Release um über ein halbes Jahr verschoben wird. Wobei es als Entwickler letztendlich egal ist, ob nun Multicore der Grund dafür ist oder doch die Konkurrenz der dynamischen Sprachen wie Scala. Somit wird das kommende Release doch wieder einiges mit sich bringen und die Java-Programmierung der nächsten Jahre prägen. Spannend ist auch, ob Joe Darcy es schafft, den Deckel auf Project Coin fest genug zu verschließen.

Gelernt habe ich an dieser Stelle, dass das Java-Jahr wirklich erst mit der Devoxx abgeschlossen wird und Belgien mehr als Pralinen zu bieten hat. Ich bin gespannt, was die Pralinenschachtel nächstes Jahr für uns enthält.

Markus Stäuble ist CTO (Head of Technology) bei Namics (Deutschland) GmbH, einem führenden IT- und Web-Dienstleister. Darüber hinaus ist er Autor von Fachartikeln und Büchern.
Geschrieben von
Kommentare

Schreibe einen Kommentar

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