© Excellent backgrounds/Shutterstock.com
API-Design mit Lambdas

Das machen wir später


Mit Java 8 kamen die neuen Sprachmittel der Lambda-Ausdrücke und Methodenreferenzen. Die Syntax dieser neuen Sprachmittel ist wahrscheinlich vielen Java-Entwicklern mittlerweile geläufig. Wir wollen der Frage nachgehen: Was würde man mit Lambdas anders machen als ohne? Was lässt sich mit den neuen Sprachmitteln besser oder eleganter ausdrücken, als es früher ohne diese Sprachmittel möglich war?

Video: API-Design mit Lambdas

Mit Lambda-Ausdrücken und Methodenreferenzen lässt sich Funktionalität ausdrücken. Im Prinzip ist ein Lambda-Ausdruck so etwas wie eine anonyme Methode, die keinen Namen hat und zu keiner Klasse gehört, sondern einfach nur Argumente nimmt und damit etwas macht. Hier ein Beispiel zur Illustration:

Comparator<String> lengthComparator = (s1,s2)->Integer.compare(s1.length(),s2.length());

Der gezeigte Lambda-Ausdruck auf der rechten Seite der Zuweisung implementiert das funktionale Interface Comparator<String> und beschreibt, wie man zwei Strings ihrer Länge nach vergleicht. Der Begriff „funktionales Interface“ wird seit Java 8 für Interfaces mit einer einzigen abstrakten Methode verwendet. Implementierungen solcher funktionalen Interfaces können durch Lambda-Ausdrücke oder Methodenreferenzen ausgedrückt werden. Zu beachten ist, dass die Funktionalität, die der Lambda-Ausdruck auf der rechten Seite der Zuweisung beschreibt, noch gar nicht ausgeführt worden ist. Hier wird nichts verglichen, sondern nur spezifiziert, wie der Vergleich gemacht werden soll, wenn er denn irgendwann einmal gebraucht wird. Die Funktionalität, die der Lambda-Ausdruck formuliert, wird erst ausgeführt, wenn die compare()-Methode des lengthComparators aufgerufen wird, also z. B. hier:

int result = lengthComparator.compare("abc","12345");

Jetzt wird die Funktionalität des Lambda-Ausdrucks ausgeführt, die Längen der beiden Strings werden verglichen, und es kommt -1 raus.

Die Tatsache, dass ein Lambda-Ausdruck Funktionalität nur beschreibt, aber nicht gleich ausführt, ist die entscheidende Eigenschaft, die Lambda-Ausdrücke von allen bislang in Java vorhandenen Sprachmitteln unterscheidet. Wie hat Cay Horstmann es in seinem Buch „Java SE 8 for the Really Impatient“ [1] so treffend ausgedrückt: „The point of all lambdas is deferred execu­tion.“ Es geht darum, Funktionalität zu beschreiben, die man jemandem gibt, der sie später ausführt.

Genau diese Eigenschaft nutzen APIs, die Lambdas als Argumente entgegennehmen. Es wird getrennt zwischen dem API-Benutzer, der Funktio...

Exklusives Abo-Special

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang