Неверное лямбда-выражение - PullRequest
0 голосов
/ 06 октября 2019

Почему приведенное ниже не является действительным лямбда-выражением?

 (Integer i) -> return "Alan" + i;

Я ожидаю, что оно будет действительным, но на самом деле оно недействительно, пожалуйста, объясните

Ответы [ 2 ]

5 голосов
/ 06 октября 2019

Было бы допустимым лямбда-выражением, если вы правильно поняли синтаксис.

Function<Integer, String> f1 = (Integer i) -> { return "Alan" + i; };
Function<Integer, String> f2 = (Integer i) -> "Alan" + i;
Function<Integer, String> f3 = (i) -> "Alan" + i;
Function<Integer, String> f4 = i -> "Alan" + i;

Тело лямбды является выражением (1) или блоком (2) ( JLS-15.27.2 ).

(1)

returnexpression

return никогда не является частью выражения, это оператор, который контролирует выполнениеflow ( JLS-14.17 ).

(2)

Для создания блока необходимы скобки.

{ return expression; }

1 голос
/ 06 октября 2019

Требуется немного больше контекста, о том, как вы его используете. Но для начала попробуйте удалить return:

(Integer i) -> "Alan" + i

Кроме того, объявление Integer может быть излишним - но нам действительно нужно увидеть, чего вы пытаетесь достичь, и ожидаемый типлямбдаВы уверены, что лямбда должна вернуть String?

...