在代码1中:没有错误,它可以工作。代码2有上述编译时错误。
问题1:为什么?
问题2:如何在代码2中返回函数?
代码1:
static <T> Consumer<T> m1(Consumer<T> consumer) {
Consumer<T> c = obj -> {
consumer.accept(obj);
};
return c;
}
代码2:
static <T, R> Function<T, R> m2(Function<T, R> f) {
// Compile Error: The target type of this expression must be a functional interface
Function<T, R> o = {x -> {
f.apply(x);
}};
return o;
}
1条答案
按热度按时间b09cbbtk1#
在代码2中,我得到了eclipse中的错误,这是没有帮助的。在命令行上编译时,出现以下错误:
你的牙套没必要。外对大括号正在尝试创建数组初始值设定项,而不是lambda表达式。内大括号确实尝试创建lambda表达式,但这不能在数组初始值设定项中完成。
可以使表达式成为lambda表达式的返回类型,而不使用大括号。尝试: