Abd*_*man 12 java lambda java-8 functional-interface
我怎样才能在Java 8中做这样的事情?
boolean x = ((boolean p)->{return p;}).apply(true);
Run Code Online (Sandbox Code Playgroud)
现在我收到以下错误:
此表达式的目标类型必须是功能接口
Tun*_*aki 22
根据JLS 第15.27节:
如果lambda表达式出现在除赋值上下文(第5.2节),调用上下文(第5.3节)或转换上下文(第5.5节)之外的某个位置的程序中,则为编译时错误.
也可以在return语句中使用lambda表达式.
然后我们可以用四种不同的方式重写你的例子:
通过创建分配上下文:
Function<Boolean, Boolean> function = p -> p;
boolean x = function.apply(true);
Run Code Online (Sandbox Code Playgroud)通过创建调用上下文:
foobar(p -> p);
private static void foobar(Function<Boolean, Boolean> function) {
boolean x = function.apply(true);
}
Run Code Online (Sandbox Code Playgroud)通过创建投射上下文:
boolean x = ((Function<Boolean, Boolean>) p -> p).apply(true);
Run Code Online (Sandbox Code Playgroud)使用return声明:
boolean x = function().apply(true);
private static Function<Boolean, Boolean> function() {
return p -> p;
}
Run Code Online (Sandbox Code Playgroud)此外,在这个简单的示例中,整个lambda表达式可以重写为:
UnaryOperator<Boolean> function = UnaryOperator.identity();
Run Code Online (Sandbox Code Playgroud)