为什么需要功能接口才能使用Lambda?

codepleb:

我认为这个问题已经存在,但是我找不到。

我不明白,为什么必须要有一个功能接口才能使用lambda。考虑以下示例:

public class Test {

    public static void main(String...args) {
        TestInterface i = () -> System.out.println("Hans");
//      i = (String a) -> System.out.println(a);

        i.hans();
//      i.hans("Hello");
    }
}

public interface TestInterface {
    public void hans();
//  public void hans(String a);
}

这可以正常工作,但是如果您取消注释行,则不会。为什么?以我的理解,编译器应该能够区分这两种方法,因为它们具有不同的输入参数。为什么我需要一个功能接口并炸毁我的代码?

编辑:链接的重复项没有回答我的问题,因为我在询问不同的方法参数。但是在这里,我得到了一些非常有用的答案,这要归功于所有人的帮助!:)

EDIT2:对不起,我显然不是母语人士,但请精确地说:

public interface TestInterface {
    public void hans();                 //has no input parameters</br>
    public void hans(String a);         //has 1 input parameter, type String</br>
    public void hans(String a, int b);  //has 2 input parameters, 1. type = String, 2. type = int</br>
    public void hans(int a, int b);     //has also 2 input parameters, but not the same and a different order than `hans(String a, int a);`, so you could distinguish both
}

public class Test {

    public static void main(String...args) {
        TestInterface i = () -> System.out.println("Hans");
        i = (String a) -> System.out.println(a);
        i = (String a, int b) -> System.out.println(a + b);
        i = (int a, int b) -> System.out.println(a);

        i.hans(2, 3);   //Which method would be called? Of course the one that would take 2 integer arguments. :)
    }
}

我要问的只是论点。方法名称无关紧要,但是每个方法采用不同参数的唯一顺序,因此,Oracle可以实现此功能,而不是仅使每个“ Lambda接口”使用一个方法即可。

他们是 :

当你写:

TestInterface i = () -> System.out.println("Hans");

您可以实现的void hans()方法TestInterface

如果您可以将lambda表达式分配给具有多个抽象方法的接口(即非功能性接口),则lambda表达式只能实现一种方法,而其他方法则无法实现。

您不能通过将两个具有不同签名的lambda表达式分配给同一变量来解决它(就像您不能将两个对象的引用分配给单个变量一样,并且希望该变量一次引用两个对象)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么这里需要接口才能获得正确的结果

来自分类Java

为什么在功能接口中使用下限

来自分类Java

表达式的目标类型必须是功能接口–为什么需要此接口?

来自分类Dev

为什么我们在实现功能接口时需要编写“实现接口名称”?

来自分类Java

Kotlin:使用lambda代替功能接口?

来自分类Java

为什么我可以对可运行和供应商功能接口使用相同的lambda?

来自分类Dev

为什么需要打字才能使用打字稿?

来自分类Dev

为什么 Serialize 方法需要实例才能使用?

来自分类Java

可以将BiFunction引用传递给需要功能接口的方法吗?

来自分类Dev

为什么需要重新分配包含 setInterval 的变量才能使计数功能工作?

来自分类Java

为什么在工厂方法和方法参考中使用lambda时,功能接口的初始化会有所不同(单例/原型)

来自分类Dev

为什么在MISRA:2012中需要功能原型?

来自分类Dev

为什么定义MonadReader需要功能依赖?

来自分类Dev

为什么需要修补Linux内核才能使用pandaboard的spi?

来自分类Dev

VB.Net 为什么我的字典需要显式声明才能使用select?

来自分类Dev

为什么需要包含<stdio.h>才能使用CUDA的printf()?

来自分类Dev

您需要python才能使用casper.js吗?如果可以,为什么?

来自分类Dev

为什么需要声明“ extern crate core”才能使用libcore?

来自分类Dev

为什么控制器需要实例变量才能使用Ajax

来自分类Dev

为什么需要启动Web服务器才能使用d3?

来自分类Dev

为什么我需要两个条件分支才能使用rreverse函数?

来自分类Dev

为什么需要从计算机上卸载节点才能使用nvm?

来自分类Dev

为什么 Google 说我需要 chrome 才能使用我的 Yubico 安全密钥?

来自分类Dev

为什么我需要使用`return`才能使递归起作用?

来自分类Dev

为什么我需要在Windows上格式化USB才能使用unetbootin

来自分类Dev

为什么我的表单需要两(2)次单击才能使用jQuery Validate提交?

来自分类Dev

为什么 MSVC++ 需要 std::setprecision 才能使用 std::hexfloat 启用全精度输出?

来自分类Dev

forEach参数与使用者功能接口参数不匹配,但是代码仍然可以编译,为什么?

来自分类Dev

Java功能接口的优点是什么?

Related 相关文章

  1. 1

    为什么这里需要接口才能获得正确的结果

  2. 2

    为什么在功能接口中使用下限

  3. 3

    表达式的目标类型必须是功能接口–为什么需要此接口?

  4. 4

    为什么我们在实现功能接口时需要编写“实现接口名称”?

  5. 5

    Kotlin:使用lambda代替功能接口?

  6. 6

    为什么我可以对可运行和供应商功能接口使用相同的lambda?

  7. 7

    为什么需要打字才能使用打字稿?

  8. 8

    为什么 Serialize 方法需要实例才能使用?

  9. 9

    可以将BiFunction引用传递给需要功能接口的方法吗?

  10. 10

    为什么需要重新分配包含 setInterval 的变量才能使计数功能工作?

  11. 11

    为什么在工厂方法和方法参考中使用lambda时,功能接口的初始化会有所不同(单例/原型)

  12. 12

    为什么在MISRA:2012中需要功能原型?

  13. 13

    为什么定义MonadReader需要功能依赖?

  14. 14

    为什么需要修补Linux内核才能使用pandaboard的spi?

  15. 15

    VB.Net 为什么我的字典需要显式声明才能使用select?

  16. 16

    为什么需要包含<stdio.h>才能使用CUDA的printf()?

  17. 17

    您需要python才能使用casper.js吗?如果可以,为什么?

  18. 18

    为什么需要声明“ extern crate core”才能使用libcore?

  19. 19

    为什么控制器需要实例变量才能使用Ajax

  20. 20

    为什么需要启动Web服务器才能使用d3?

  21. 21

    为什么我需要两个条件分支才能使用rreverse函数?

  22. 22

    为什么需要从计算机上卸载节点才能使用nvm?

  23. 23

    为什么 Google 说我需要 chrome 才能使用我的 Yubico 安全密钥?

  24. 24

    为什么我需要使用`return`才能使递归起作用?

  25. 25

    为什么我需要在Windows上格式化USB才能使用unetbootin

  26. 26

    为什么我的表单需要两(2)次单击才能使用jQuery Validate提交?

  27. 27

    为什么 MSVC++ 需要 std::setprecision 才能使用 std::hexfloat 启用全精度输出?

  28. 28

    forEach参数与使用者功能接口参数不匹配,但是代码仍然可以编译,为什么?

  29. 29

    Java功能接口的优点是什么?

热门标签

归档