有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java Getting Error::此表达式的目标类型必须是函数接口

我正在尝试实现一个示例库,客户机可以使用它执行代码,为了实现这个示例库,我使用了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;
            }
        };
    }
}

请告诉我我遗漏了什么


共 (1) 个答案

  1. # 1 楼答案

    Alambda expression是功能接口的实现。方法executeCode()返回泛型类型(T),并且T不是函数接口,但方法executeCode()中的代码试图返回函数接口

    方法executeCode()的另一个参数是函数接口,因此当调用该方法时,可以将lambda表达式作为参数传递,即

    executeCode( () -> return null, someDefault )
    

    这里有一个更“具体”的例子

    public class Tester {
        public static void main(String[] args) {
            HighOrderFunctionClass<String> hofc = new HighOrderFunctionClass<>();
            String someDefault = "I am the default value.";
            ImplemenetIt<String> it = () -> return "Hello world.";
            String result = hofc.executeCode(it, someDefault);
        }
    }