Java 中的新功能 Lambda 重载

New Feature Lambda Overloading in Java

我有点困惑为什么没有像 lambda 重载这样的东西。
我知道 lambda 表达式与 @FunctionalInterface 一起工作 如果您在接口中有两个或更多抽象方法,那么当您使用 lambda 表达式时编译器无法决定调用哪个函数,因此只有一个抽象方法是必要的如果要使用 lambda 表达式,请输入接口。但是,如果您有两个或多个具有不同参数或不同类型参数或 return 类型的函数,编译器可以轻松决定调用哪个函数怎么办。

例如:

 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 表达式应该对应于哪个方法。您没有考虑的是接口中所有 other 方法的情况。

可以 指定语言,以便 lambda 表达式对应一个方法,而所有其他方法都抛出一个 RuntimeException - 但这很少有用。考虑 Foo 将如何 使用 。您最终会得到一个只能调用某些方法的对象,您甚至不知道 哪些 方法可以安全调用。

如果您知道您只会调用一个方法(例如您的示例中的 count),那么这是一个独立的功能,并且可以单独封装在一个接口中 -点现有的 lambda 表达式功能很好。如果您不知道您只想使用一种方法,那么您的建议无论如何都无济于事。