Java 8 lambdas execution
2022-09-03 12:44:02
如何在Java 8中做这样的事情?
boolean x = ((boolean p)->{return p;}).apply(true);
现在我得到以下错误:
此表达式的目标类型必须是功能接口
如何在Java 8中做这样的事情?
boolean x = ((boolean p)->{return p;}).apply(true);
现在我得到以下错误:
此表达式的目标类型必须是功能接口
根据JLS第15.27节:
如果 lambda 表达式出现在程序中除赋值上下文 (§5.2)、调用上下文 (§5.3) 或强制转换上下文 (§5.5) 以外的某个位置,则会出现编译时错误。
也可以在 return
语句中使用 lambda 表达式。
然后,我们可以用四种不同的方式重写您的示例:
通过创建任务上下文:
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;
}
此外,在这个简单的示例中,整个 lambda 表达式可以重写为:
UnaryOperator<Boolean> function = UnaryOperator.identity();