【发布时间】:2020-10-17 10:18:29
【问题描述】:
我正在尝试实现一个示例库,客户端可以使用该库执行他们的代码,为了实现它,我正在使用 JAVA 的函数式编程特性。 但是出现编译错误这个表达式的目标类型必须是函数式接口
@FunctionalInterface
public interface ImplemenetIt<T> {
public T provideYourImpl();
}
public class HighOrderFunctionClass<T> {
public T executeCode(ImplemenetIt<T> it, T defaultAnswer) {
T answer = defaultAnswer;
return () -> { // At this line I am getting error
try {
answer = it.provideYourImpl();
} catch (Exception ex) {
} finally {
return answer;
}
};
}
}
请提出我所缺少的。
【问题讨论】:
-
你的 lambda 表达式的主体是完全有害的。您正在捕获所有
Exceptions,然后默默地忽略它们(因为您的catch块是空的)。无论如何,异常都会被吞下,因为您的finally块中有一个return。你shouldn't do that. -
关于您遇到的错误:您将
executeCode的返回类型定义为T,但您正试图返回功能接口的一些实现。但是T可以是任意类型,所以lambda表达式不能符合T。
标签: java lambda functional-programming