我正试图解决代码中给出的问题。我想要一个能够接受任何函数的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")
}
但它让我对传递给功能接口的函数中的参数有误。有没有办法做到这一点?
答案 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和方法引用要求在编译时知道此信息。