Definition
funktionales Interface
Ein funktionales Interface ist ein Java-Interface, das nur eine einzige abstrakte Methode definiert.
Erläuterung
Funktionale Interfaces spielen eine zentrale Rolle bei der Verwendung von Lambda-Ausdrücken in Java. Anhand eines Beispiels soll dies verdeutlicht werden.
Beispiel

Das Demo-Interface Checkable
Das Interface Checkable deklariert genau eine abstrakte Methode boolean check().
Ein funktionales Interface zeichnet sich dadurch aus, dass es genau eine abstrakte Methode enthält. Damit ist es geeignet, mit Lambda-Ausdrücken verwendet zu werden.

Die Klasse Rectangle (Demo-Version)
Die Klasse Rectangle wurde hier nur zu Demonstrationszwecken definiert. Sie enthält zwei Instanzvariablen length und width sowie die entsprechenden Getter-Methoden getLength() und getWidth().

Die Klasse LamdaDemo
Jetzt wird es langsam interessant. In Zeile 6 wird zunächst ein Objekt der Klasse Rectangle erzeugt, mit einer Länge von 8 und einer Breite von 12.
Die Methode checkValidity() (in den Zeilen 17 bis 21) erwartet als Parameter ein Objekt des Interfaces Checkable und liefert einen String zurück.
Innerhalb dieser Methode wird die Interface-Methode check() aufgerufen, die einen Wahrheitswert zurückgibt. Abhängig vom Ergebnis wird "valid" oder "invalid" zurückgegeben.
Verwendung von Lamda-Ausdrücken
In den Zeilen 8 bis 9 wird checkValidity() mit einem Lambda-Ausdruck aufgerufen:
() -> rect.getLength() > 0 && rect.getWidth() > 0
Auf der linken Seite des Pfeil-Operators steht eine leere Parameterliste, weil die Methode check() des Interfaces ja auch keine Parameter erwartet.
Auf der rechten Seite des Pfeil-Operators steht nun ein Ausdruck, der die Methode check() implementiert. Diese Implementation überprüft, ob die Länge und die Breite des Rechtecks größer als Null sind.
Der Lambda-Ausdruck ersetzt also die sonst übliche Implementierung von Checkable in einer konkreten Klasse.
Das Ganze wiederholt sich in den Zeilen 12 und 13. Nur wird hier eine andere Implementation der Methode check() als Parameter an checkValidity() übergeben. Jetzt soll überprüft werden, ob Länge und Breite des Rechtecks kleiner oder gleich 10 sind.
Quellen:
- Q. Charatan and A. Kans: Programming in Two Semesters. Springer Nature Switzerland AB 2022.