15.09.2014 Aufrufe

Schrödinger programmiert Java - Das etwas andere Fachbuch

Schrödinger programmiert Java - Das etwas andere Fachbuch

Schrödinger programmiert Java - Das etwas andere Fachbuch

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Guck nicht so erschrocken. Statt anonymer Klassen kannst du jetzt<br />

an vielen Stellen solche Lambda-Ausdrücke verwenden. Voraussetzung: <strong>Das</strong> Interface,<br />

das von der anonymen Klasse implementiert wird, ist als funktionales Interface<br />

markiert (über die Annotation @FunctionalInterface) und hat exakt eine<br />

Methode. <strong>Das</strong> ist ja auch irgendwie logisch, sonst wäre ja nicht klar, welche Methode<br />

aufgerufen werden soll.<br />

Alterativ hättest du eben auch schreiben können:<br />

List zahlen = Arrays.asList(4,5,6,7,5,6,4,7);<br />

Comparator comparator = (zahl1, zahl2) -> zahl2.compareTo(zahl1);*1<br />

Collections.sort*2(zahlen, comparator);<br />

[Hintergrundinfo]<br />

Lambda-Ausdrücke an sich sind keine Neuerfindung<br />

von <strong>Java</strong>. Funktionale Programmiersprachen wie Lisp<br />

und Haskell haben so <strong>etwas</strong> schon lange. Vielmehr<br />

wird andersherum ein Schuh daraus: Die anonymen<br />

Klassen waren eher eine Notlösung in <strong>Java</strong>, ein Mittel<br />

zum Zweck, um <strong>etwas</strong> wie Lambda-Ausdrücke hinzubekommen.<br />

In den letzten Jahren haben übrigens verschiedene<br />

objektorientierte Sprachen, so auch C# und<br />

C++, Lambda-Ausdrücke aufgenommen. <strong>Java</strong>Script<br />

lässt sie schon immer zu, dort haben Funktionen<br />

sowieso einen höheren Stellenwert als Klassen. Genauer<br />

gesagt, gibt es dort in der aktuellen Version gar keine<br />

Klassen. Aber das, lieber <strong>Schrödinger</strong>, ist ein <strong>andere</strong>s<br />

Thema.<br />

*1 <strong>Das</strong> Gleiche wie eben, nur<br />

dass du den Lambda-Ausdruck einer<br />

Variablen zuweist. Hier siehst du<br />

also nochmal: Ein Lambda-Ausdruck<br />

ist nichts <strong>andere</strong>s als die<br />

Implementierung eines Interfaces<br />

mit einer Methode.<br />

*2 Hier bleibt auch<br />

alles beim Alten, nur dass du<br />

diesmal die Comparator-<br />

Variable übergibst.<br />

[Achtung]<br />

Damit dieser<br />

Code überhaupt funktioniert, musst du natürlich auch das JDK in<br />

der Version 8 installieren und deinen Code mit dem <strong>Java</strong> 8-Compiler kompilieren.<br />

Eclipse 4.3.1 ist jetzt, zur Zeit der Drucklegung, aktuell und unterstützt<br />

<strong>Java</strong> 8 noch nicht. Falls das für deine Eclipse-Version auch gilt, ist es das einfachste,<br />

du nimmst die Development-Version von NetBeans. Die enthält auch<br />

schon vor Erscheinen von <strong>Java</strong> 8 eine sehr brauchbare Developer-Preview von<br />

<strong>Java</strong> 8, das übrigens „feature complete“ ist, das heißt, das, was du damit<br />

lernst, wird nicht mehr über den Haufen geworfen.<br />

348 Kapitel ACHT

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!