我正在尝试实现类似代码中给出的功能。我想要一个可以接受任何功能的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")
}


但这使我对传递给函数接口的函数中的参数有误解。有什么办法吗?

最佳答案

您的功能接口定义了接受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和方法引用要求在编译时知道此信息。

关于java - 带不确定数量参数的Lambda函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23962625/

10-10 16:43