为什么Java 8中的功能接口有一个抽象方法?

Har*_*ara 18 java java-8 functional-interface

正如我们在Java 8中所知,引入了功能接口的概念.功能接口有一种abstract方法,可以使用多种默认或静态方法.

但为什么Functional接口只有一个抽象方法呢?如果Interface有多个抽象方法,为什么这不是一个功能接口?

Adi*_*yal 21

引入了称为单抽象方法接口的功能接口以促进Lambda功能.由于lambda函数只能提供1方法的实现,因此功能接口必须只有一个抽象方法.欲了解更多详细信息,请参考这里.

编辑 - >另外值得注意的是,功能界面可以在界面中具有默认实现.您将在上面的链接中找到有关实施的更多详细信息.

  • 实际上,只有一个抽象方法被允许的规则有一个例外 - 函数式接口可以有另一种抽象方法,如果它们是由 java.lang.Object 实现的,例如 toString()。 (2认同)

sn.*_*rag 11

如果 Java 允许有两个抽象方法,那么将需要 lambda 表达式来提供这两个方法的实现。因为,调用方法不知道从这两个抽象方法中调用哪个方法。它可以称为未实施的那个。例如

如果 Java 允许这种功能接口

@FunctionalInterface
interface MyInterface {
    void display();
    void display(int x, int y);
}
Run Code Online (Sandbox Code Playgroud)

那么在实施以下内容时是不可能的。

public class LambdaExpression {
    public static void main(String[] args) {
        MyInterface ref = () -> System.out.print("It is display from sout");
        ref.display(2, 3);

    }
}
Run Code Online (Sandbox Code Playgroud)

由于 display(int x, int y) 没有实现,它会给出错误。这就是为什么功能接口是单个抽象方法接口的原因。


Say*_*ald 5

通过功能接口,我们可以像调用函数一样调用对象,这使我们可以在程序周围传递动词(函数),而不是名词(对象)。功能接口的实现执行一个明确定义的动作,就像任何方法都应该使用运行,执行,执行,应用或其他通用谓词之类的名称。[1]

  1. Scala和Clojure中的函数式编程模式。