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.