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

时间:2017-08-26 09:18:39

标签: java lambda 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");
  } 
}

2 个答案:

答案 0 :(得分:1)

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

此外,它明确指出

  

但是,无论接口声明中是否存在FunctionalInterface注释,编译器都会将符合功能接口定义的任何接口视为功能接口。

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

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

但作为一个功能界面,您可以定义一个直接覆盖它的lambda:

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

答案 1 :(得分:1)

你不

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只是让编译器强制执行单一方法契约。