为什么我们在实现功能接口时需要写 "implements InterfaceName"?

Why we do need to write "implements InterfaceName" while implementing a Functional Interface?

为什么我们在实现 FunctionalInterface 时需要编写 "implements FI"?

@FunctionalInterface
interface FI
{
 void sayHello(String name);    
}

public class Hello implements FI
{   
  public static void main(String[] args)
  {
    // TODO Auto-generated method stub
    FI fi = (name) -> System.out.println("Hello " + name);
    fi.sayHello("world");
  } 
}

@FunctionalInterface 只是一种强制编译器检查的方法,因此带注释的接口只有一个 abstract 方法,仅此而已。

另外明确指出

However, the compiler will treat any interface meeting the definition of a functional interface as a functional interface regardless of whether or not a FunctionalInterface annotation is present on the interface declaration.

所以甚至不需要明确注释它。

带注释的接口仍然是一个接口,它在 Java 代码中用作所有其他接口,因此您需要在实现它时特别指定。

但是作为函数式接口,您可以定义一个直接覆盖它的 lambda:

FI fi = name -> System.out.println(name);

你没有

interface FI {
  void sayHello(String name);
}

public class Hello {
  public static void main(String[] args) {
    FI fi = (name) -> System.out.println("Hello " + name);
    fi.sayHello("world");
  }
}

Hello 没有用作函数式接口,@FunctionalInterface 也只是让编译器强制执行单一方法契约。