【问题标题】:New Feature Lambda Overloading in Java [duplicate]Java中的新功能Lambda重载[重复]
【发布时间】:2019-01-17 06:20:27
【问题描述】:

我有点困惑为什么没有像 lambda 重载这样的东西。
我知道 lambda 表达式可以与 @FunctionalInterface 一起工作如果你想使用 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中不可用。这不是一件好事。

【问题讨论】:

  • 如果我还将void hide(String message) 添加到现有界面,您希望x -> "Example Message" 执行什么操作?到showhide?

标签: java lambda overloading


【解决方案1】:

您已经考虑了问题的一方面——lambda 表达式应该对应于哪个方法。你没有考虑的是接口中所有其他方法会发生什么。

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

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

【讨论】:

    猜你喜欢
    • 2021-04-02
    • 1970-01-01
    • 1970-01-01
    • 2013-09-22
    • 1970-01-01
    • 2014-06-21
    • 2018-06-09
    • 2016-05-07
    • 2012-12-14
    相关资源
    最近更新 更多