Обязательные обязательные скобки lambda Java 8? [Дубликат]

Я пришел к той же проблеме. Исправлено это, запустив команду «rbenv global» с помощью «sudo». Я думаю, что это была проблема разрешения.

update: Я наконец нашел решение. Была одна версия файла на моем mac, которая находится под «/usr/local/Cellar/rbenv/0.3.0/». Я думаю, что это было создано по ошибке время от времени. вы должны удалить его.

18
задан hertzsprung 21 June 2012 в 20:49
поделиться

5 ответов

Вы можете опустить фигурные скобки, когда тело лямбда является единственным выражением или вызовом метода void. Каждое выражение оценивает значение и, следовательно, не может быть пусто.

Если тело лямбда является блоком операторов (например, серия вычислений, за которой следует инструкция return), или лямбда имеет нет значения (т. е. имеет тип возврата void) и не является единственным вызовом метода void, вы должны использовать форму блока, для которой требуются скобки.

В блочном лямбда, если значение равно return ed, то все возможные пути кода должны либо return, либо throw a Throwable.

18
ответ дан jpm 17 August 2018 в 22:16
поделиться
  • 1
    Я считаю, что это просто повторяет то, что говорит ОП, и добавляет некоторые дополнительные детали, не отвечая запрошенному «почему», если я не пропущу что-то. – Kevin Welker 21 June 2012 в 21:16
  • 2
    Я думаю, это объясняет мне все. Выражения не являются выражениями, потому что они не могут быть оценены. Скобки необязательны, если тело лямбда является выражением, но они являются обязательными, если тело является выражением или серией утверждений. Правильно ли это, @jpm? – hertzsprung 21 June 2012 в 21:35
  • 3
  • 4
    Кажется, что это изменилось, Lambda Tutorial теперь заявляет: «в выражении лямбда вы должны заключать инструкции в фигурные скобки ({}). Однако вам не нужно заключать вызов метода void в фигурные скобки. Например, следующее действительное лямбда-выражение: email -> System.out.println(email) " – meyertee 23 June 2013 в 16:55
  • 5
    @meyertee Спасибо за исправление. – jpm 24 June 2013 в 21:53

Если фигурных скобок нет, лямбда автоматически возвращает одно выражение после оператора ->. Таким образом, когда у вас есть лямбда, которая ничего не возвращает, вы должны использовать фигурные скобки

0
ответ дан cuddlebugCuller 17 August 2018 в 22:16
поделиться

Я пробовал свой код и для самой современной версии JRE, я думаю, что все будет в порядке.

Ниже я ссылаюсь на документы Oracle Java.

В выражении лямбда вы должны заключать выражения в фигурные скобки ({}). Однако вам не нужно вставлять вызов void-метода в фигурные скобки. Например, следующее выражение является действительным лямбда-выражением:

email -> System.out.println(email)

. Док объясняет достаточно четко. Надеюсь, это может решить вашу проблему.

Ссылки: https://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html

10
ответ дан Nayuki 17 August 2018 в 22:16
поделиться
10
ответ дан Nayuki 6 September 2018 в 14:14
поделиться
10
ответ дан Nayuki 29 October 2018 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: