Java 为什么我们需要写;实现InterfaceName“;在实现功能接口时?

Java 为什么我们需要写;实现InterfaceName“;在实现功能接口时?,java,lambda,functional-interface,Java,Lambda,Functional Interface,为什么我们在实现功能接口时需要编写“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) ->

为什么我们在实现功能接口时需要编写“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");
  } 
}

@functionaltenterface
只是一种强制编译器检查的方法,这样带注释的接口就只有一个
抽象的
方法了

此外,它还明确指出

但是,无论接口声明中是否存在
functional接口
注释,编译器都会将满足函数接口定义的任何接口视为函数接口

所以它甚至不需要显式地注释它

带注释的接口仍然是一个接口,它与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没有用作函数接口,而且@FunctionInterface只会使编译器强制执行单一方法契约。

您不需要它()。您的代码甚至无法编译,因为您的类
Hello
没有实现
FI
sayHello
方法。投票是不可复制的。您的代码确实无法编译()。