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

Does lambda expression work as an implementation of abstract method of interface?

下面的lambda表达式:

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

感谢任何能帮助我的人。

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

  2. 是。

  3. lambda 表达式不能用于预期具有多个抽象方法的接口。 lambda 表达式只能用在需要函数式接口的地方,这意味着单个抽象方法。

  1. Does the lambda expression () -> doSomething() implement the public abstract void run();?

是的,lambda 被脱糖为匿名类型,它使用使用 lambda 语法提供的代码实现 Runnable

  1. Would (param1, param2) -> {} work in the cases where an interface has only one method with two parameters?

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

  1. What to do with interfaces with two abstract methods using lambda expressions?

您不能在此处直接使用 lambda,但典型的解决方法是定义具体的 class 实现接口,其构造函数采用两个适当形状的 lambda。 class 中的实现方法委托给这些 lambda 对象。