我有点不明白为什么没有像lambda这样的过载。
我知道lambda表达式与@FunctionalInterface
一起工作,如果接口中有两个或多个抽象方法,那么编译器就无法决定在使用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中不可用。这不是件好事吗。
发布于 2019-01-16 22:26:56
您已经考虑了问题的一个方面-- lambda表达式应该对应哪个方法。您没有考虑的是接口中的所有其他方法都发生了什么。
可以指定语言,以便lambda表达式对应于一个方法,而所有其他方法都抛出一个RuntimeException
--但是这很少有用。考虑如何使用Foo
。最后,您将得到一个只能调用某些方法的对象,而且您甚至不知道可以安全地调用哪些方法。
如果您知道只调用一个方法(例如,示例中的count
),那么这是一个独立的功能,并且可以单独封装在一个接口中-此时,现有的lambda表达式功能就可以了。如果你不知道你只想使用单一的方法,那么你的建议无论如何也不会有帮助。
https://stackoverflow.com/questions/54230076
复制相似问题