Java 8 次 lambda 执行
Java 8 lambdas execution
我怎样才能在 Java 8 中做这样的事情?
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 中使用 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();
我怎样才能在 Java 8 中做这样的事情?
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 中使用 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();