Schrödinger programmiert Java - Das etwas andere Fachbuch
Schrödinger programmiert Java - Das etwas andere Fachbuch
Schrödinger programmiert Java - Das etwas andere Fachbuch
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