Lambda Ausdrücke könnte man als anonyme Methoden bezeichnen. Die Java Laguage Specification nutzt diesen Ausdruck so zwar nicht, aber auch dort geht es in diese Richtung:
Daher wird auch kein Interface implementiert wie bei einer Klasse. Da nur eine Methode implementiert wird, muss es ein funktionales Interface sein, ein Interface mit nur einer Methode.
Nein, die Methodenreferenzen werden nicht in Lambdas genutzt. Methodenreferenzen sind - wer hätte das gedacht - Referenzen auf Methoden.
Das ist also auch kein verkürzter Lambda Ausdruck oder so. Anonyme Klasse, Lambda Ausdruck und Methodenreferez sind 3 unterschiedliche Dinge, die so streng genommen nichts gemeinsam haben.
Somit läuft jetzt bei Interfaces folgende Möglichkeiten:
- Vor Java 1.8:
-- Es können Instanzen angegeben werden, die das Interface implementieren
-- Es kann eine anonyme Klasse erstellt werden, die das Interface implementiert
- Ab Java 1.8 gibt es nun noch ein funktionales Interface - dieses setzt nur die Implementation einer Methode voraus. Daher kann man lediglich eine Methode angeben:
-- Lambda Ausdruck - auch anonyme Methode nennbar
-- Methodenreferenz - also eine Referenz auf eine beliebige Methode mit passender Signatur.
Somit haben wir das jetzt wie zuvor auch schon: Bei einem funktionalen Interface wird lediglich eine Implementation der einen Methoden benötigt. Diese eine Methode kann also als anonyme Methode (Lambda Ausdruck) oder über eine Methodenreferenz angegeben werden.