Как я могу сделать что-то подобное в Java 8?Java 8 lambdas исполнение
boolean x = ((boolean p)->{return p;}).apply(true);
Сейчас я получаю следующее сообщение об ошибке:
The target type of this expression must be a functional interface
Как я могу сделать что-то подобное в Java 8?Java 8 lambdas исполнение
boolean x = ((boolean p)->{return p;}).apply(true);
Сейчас я получаю следующее сообщение об ошибке:
The target type of this expression must be a functional interface
В соответствии с JLS section 15.27:
It is a compile-time error if a lambda expression occurs in a program in someplace other than an assignment context (§5.2), an invocation context (§5.3), or a casting context (§5.5).
Это также возможно использовать лямбда-выражение в return
statement.
Затем мы можем переписать пример четырьмя различными способами:
Создавая контекст присваивания:
Function<Boolean, Boolean> function = p -> p;
boolean x = function.apply(true);
Создавая контекст вызова:
foobar(p -> p);
private static void foobar(Function<Boolean, Boolean> function) {
boolean x = function.apply(true);
}
Создавая контекст литья:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
Использование return
заявления:
boolean x = function().apply(true);
private static Function<Boolean, Boolean> function() {
return p -> p;
}
Кроме того, в этом простом примере, выражение весь лямбды можно переписать в виде:
UnaryOperator<Boolean> function = UnaryOperator.identity();
Спасибо! –
Примеров я могу видеть сделать не использовать {}, так как он должен быть одним выражением. [Tutorial] (http://winterbe.com/posts/2014/03/16/java-8-tutorial/) – flaschenpost
То же самое без <} вокруг возврата p. Я не думаю, что это проблема. –
Ваша ошибка в том, что 'Function' имеет какой-либо особый статус, чтобы тип лямбды автоматически принудительно вставлялся в него. На самом деле ваше выражение не имеет ограничений по типу. –