Java >> Java tutorial >  >> Tag >> return

Lambda-udtryk, der har returtype som void, kan kompilere med wrapper, men ikke kompilere med primitiv

Indpakning vs primitiv er ikke årsagen. Følgende vil heller ikke kompilere:

Integer i = 5;
A b = () -> i;

Dette er dækket af JLS 15.27.3:

Hvis funktionstypens resultat er void, er lambda-kroppen enten et sætningsudtryk (§14.8) eller en void-kompatibel blok.

5 er hverken en erklæring eller en void-kompatibel blok. Så A a = () -> 5; vil ikke kompilere.

Årsagen til denne begrænsning er, at lambda, der returnerer tomrum, kun giver mening, hvis den virker ved en bivirkning. Du skal blot returnere en værdi som () -> 5 har ingen bivirkninger, og derfor er sådan et lambda-udtryk bestemt en fejl.


Java tag