问题
How can I do something like this in Java 8?
boolean x = ((boolean p)->{return p;}).apply(true);
Right now I get the following error:
The target type of this expression must be a functional interface
回答1:
As per the 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).
It is also possible to use a lambda expression in a return statement.
We can then rewrite your example in four different ways:
By creating an assignment context:
Function<Boolean, Boolean> function = p -> p; boolean x = function.apply(true);
By creating an invocation context:
foobar(p -> p); private static void foobar(Function<Boolean, Boolean> function) { boolean x = function.apply(true); }
By creating a casting context:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
Using a
return
statement:boolean x = function().apply(true); private static Function<Boolean, Boolean> function() { return p -> p; }
Also, in this simple example, the whole lambda expression can be rewritten as:
UnaryOperator<Boolean> function = UnaryOperator.identity();
来源:https://stackoverflow.com/questions/32383699/java-8-lambdas-execution