【问题标题】:Lambda functions with an indefinite number of arguments具有无限个参数的 Lambda 函数
【发布时间】:2014-05-30 20:06:59
【问题描述】:

我正在尝试实现类似于代码中给出的内容。我想要一个能够接受任何函数的 lambda 表达式

interface ExecuteAnyCode{
    void execute(Object... args);
}

void entry(){
    ExecuteAnyCode a = Math::sin;
    ExecuteAnyCode b = System.out::println;

    a.execute(5);
    b.execute("Hello World")
}

但它给了我一个关于传递给函数接口的函数中的参数的错误。有没有办法做到这一点?

【问题讨论】:

  • 你遇到了什么错误?
  • Math 类型没有定义适用于此的 sin(Object[])
  • 我认为您不了解 lambdas/方法引用的工作原理。
  • 我知道 lambdas 是如何工作的我只是想知道是否有任何方法可以做到这一点
  • The type Math does not define sin(Object[]) that is applicable here 我认为该评论是对为什么代码不起作用的解释。然后我注意到它是由 OP 发布的,并意识到这是他们得到的错误。

标签: java interface lambda java-8


【解决方案1】:

您的功能接口定义了一个接受Object... 的方法。无论您使用什么方法引用作为对该功能接口类型的变量的赋值,都必须具有匹配的签名。 Math::sin 没有。

ExecuteAnyCode#execute 方法允许你调用它

ref.execute(1, 2, "3", 4, new Something());

如果有的话会怎样

ExecuteAnyCode ref = Math::sin;
ref.execute(1, 2, "3", 4, new Something());

什么会传递给Math.sin

语言不允许您尝试做的事情。 Lambda 和方法引用要求在编译时知道此信息。

【讨论】:

    猜你喜欢
    • 2022-07-27
    • 1970-01-01
    • 2019-08-16
    • 2017-12-09
    • 1970-01-01
    • 2018-10-02
    • 2017-08-29
    • 1970-01-01
    • 2017-04-03
    相关资源
    最近更新 更多