Java中Lambda重载的新特性

Java中Lambda重载的新特性,java,lambda,overloading,Java,Lambda,Overloading,我对为什么没有lambda重载之类的东西感到有点困惑。 我知道lambda表达式与@functioninterface一起工作。如果在接口中有两个或多个抽象方法,则编译器无法决定在使用lambda表达式时调用哪个函数,因此如果要使用lambda表达式,则必须在接口中只有一个抽象方法。但是,如果您有两个或多个具有不同参数的函数,或者具有不同类型的参数或返回类型,而编译器无法轻松决定要调用哪个函数,该怎么办呢 例如: interface Foo{ void show(String mes

我对为什么没有lambda重载之类的东西感到有点困惑。
我知道lambda表达式与
@functioninterface
一起工作。如果在接口中有两个或多个抽象方法,则编译器无法决定在使用lambda表达式时调用哪个函数,因此如果要使用lambda表达式,则必须在接口中只有一个抽象方法。但是,如果您有两个或多个具有不同参数的函数,或者具有不同类型的参数或返回类型,而编译器无法轻松决定要调用哪个函数,该怎么办呢

例如:

 interface Foo{
     void show(String message);
     void count(int number);
 }

 // Calling with lambda (Syntax is not correct)
 x -> "Example Message";  // It should need to call void show();
 x -> 7; // It should need to call void count();

为什么这种东西在java中不可用。这不是一件好事吗

您已经考虑了问题的一个方面-lambda表达式应该对应于哪个方法。您没有考虑的是接口中所有其他方法的情况

可以指定语言,使lambda表达式对应于一个方法,而所有其他方法抛出
运行时异常
——但这很少有用。考虑如何使用<代码> FoO 。最终得到的对象只能对其调用某些方法,而您甚至不知道可以安全地调用哪些方法


如果您知道只调用一个方法(例如,在您的示例中,
count
),那么这是一个独立的功能,可以单独封装在一个接口中—此时现有的lambda表达式功能就可以了。如果您不知道您只想使用一种方法,那么您的建议无论如何都不会有帮助。

您已经考虑了问题的一个方面-lambda表达式应该对应于哪种方法。您没有考虑的是接口中所有其他方法的情况

可以指定语言,使lambda表达式对应于一个方法,而所有其他方法抛出
运行时异常
——但这很少有用。考虑如何使用<代码> FoO 。最终得到的对象只能对其调用某些方法,而您甚至不知道可以安全地调用哪些方法


如果您知道只调用一个方法(例如,在您的示例中,
count
),那么这是一个独立的功能,可以单独封装在一个接口中—此时现有的lambda表达式功能就可以了。如果您不知道您只想使用一种方法,那么您的建议无论如何都不会有帮助。

如果我还将
void hide(String Message)
添加到现有界面中,您希望
x->“示例消息”
执行什么操作?要
显示
隐藏
?如果我也将
无效隐藏(字符串消息)
添加到现有界面中,您希望
x->“示例消息”
执行什么操作?要
显示
还是要
隐藏