Lambda函数具有无限数量的参数

时间:2014-05-30 20:07:00

标签: java interface lambda java-8

我正试图解决代码中给出的问题。我想要一个能够接受任何函数的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")
}

但它让我对传递给功能接口的函数中的参数有误。有没有办法做到这一点?

1 个答案:

答案 0 :(得分:7)

您的功能界面定义了一个接受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

该语言不允许您尝试执行的操作。 Lambdas和方法引用要求在编译时知道此信息。