当前位置: 首页 > 知识库问答 >
问题:

获取错误::此表达式的目标类型必须是函数接口

仲孙文乐
2023-03-14

我正在尝试实现一个示例库,客户端可以使用它来执行他们的代码,为了实现它,我使用了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个答案

乜昆
2023-03-14

lambda表达式是函数接口的实现。方法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);
    }
}
 类似资料:
  • 问题内容: 我正在尝试在Java中使用lambda和流,但我对此很陌生。当我尝试创建lambda表达式时,我在IntelliJ中收到了此错误“ lambda转换的目标类型必须是接口” 难道我做错了什么? 问题答案: 我怀疑这只是Java的类型推断不够聪明。尝试

  • 我是爪哇的新手。我不明白为什么会发生这些错误。尝试创建一个数组列表,以便它保存每个对象。我得到的错误是 表达式的类型必须是数组类型,但它解析为数组列表上的行“newbug1[i].setpecies();” 提前致谢

  • 从0.13.2更新到0.14.2后,我发现以下错误: 对此已经有几个问题了。最常见的错误是拼错React.component(没有大写字母C)。另一个是尝试使用ES6类的版本 但我已经成功地使用了带有React 0.13.x的ES6类,我在所有地方都使用大写字母C,并且记录React.Component似乎给出了一个合适的结果(函数ReactComponent(…) 经过一些搜索,我做了这3个测试

  • 我创建这个类是为了更好地使用它 然后我想创建一个简单的函数来剪辑一个矩形,就像这样 但是当我将rect传递到我的函数中时,我在标题中得到了错误。我甚至还打印了字体 我想知道Rect样式的对象和Rect对象之间是否有区别,因为我太困惑了。此外,在屏幕上绘制矩形是布局tic-tac-toe GUI的最佳方式,还是绘制线条更简单。

  • 我正尝试将Exchange Web服务(EWS)与应用程序和OAuth2身份验证一起使用。 我所做的: null

  • 我不知道我的代码发生了什么。我似乎无法弄清楚为什么数组会给我这个错误。该行是特别是 我的代码: