lambda表达式是否作为接口抽象方法的实现?

时间:2015-01-21 14:07:11

标签: java interface lambda java-8

下面的lambda表达式:

    new Thread(() -> 
        doSomething()
    ).start();
  1. lambda表达式() -> doSomething()是否实现了public abstract void run();
  2. (param1, param2) -> {}会在接口只有一个带两个参数的方法的情况下工作吗?
  3. 如何处理使用lambda表达式的两个抽象方法的接口?
  4. 感谢所有能帮助我的人。

2 个答案:

答案 0 :(得分:4)

  1. 您的lambda表达式的行为类似于实现Runnable的抽象类实例,但它不一定是作为抽象类实例实现的。

  2. 在需要具有多个抽象方法的接口的情况下,不能使用lambda表达式。 lambda表达式只能在需要功能接口的地方使用,这意味着单个抽象方法。

答案 1 :(得分:4)

  
      
  1. lambda表达式() -> doSomething()是否实现了public abstract void run();
  2.   

是的,lambda被描述为一个匿名类型,它使用lambda语法提供的代码实现Runnable

  
      
  1. (param1, param2) -> {}会在接口只有一个带两个参数的方法的情况下工作吗?
  2.   

是的,重要的是 lambda shape 与接口方法的形状相匹配。

  
      
  1. 如何处理使用lambda表达式的两个抽象方法的接口?
  2.   

你不能在这里直接使用lambdas,但一个典型的解决方法是定义一个实现接口的具体类,并且它的构造函数接受两个相应形状的lambdas。类中的实现方法委托给这些lambda对象。