Wyrażenia lambda mają swój typ i jest nim interfejs funkcyjny (podobnie jak obiekt
item ma swój typ i jest nim
Item). O typach mówiliśmy już w rozdziale
Interfejs jako typ danych,
więc jeśli nie pamiętasz o co chodzi, to zachęcamy do przejrzenia jeszcze raz tamtego rozdziału.
Interfejsy funkcyjne pozwalają na definiowanie różnych rodzajów obiektów, na przykład z jednym parametrem i jedną wartością zwracaną,
albo z dwoma parametrami i jedną wartością zwracaną, a także kilka innych kombinacji.
I tak na przykład wyrażenie lambda z naszego interfejsu
Item jest typu
Supplier,
który jest interfejsem funkcyjnym bez parametrów i z jedną wartością zwracaną. Skoro tak jest, to możemy w kodzie podmienić
nasz interfejs i wprowadzić tam typ
Supplier, a kod nadal będzie się kompilował. Jedyna rzecz, o której musimy pamiętać, to określenie parametru typu
(w tym przypadku
String), ponieważ supplier oczekuje, że powiemy mu z jakim typem obiektu będzie pracował.
Wynik wykonania kodu:
Java 8 wprowadza cały szereg interfejsów funkcyjnych. Wszystkie dokładnie omawiamy w ramach kursu.