为什么我们在实现功能接口时需要写 "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 也只是让编译器强制执行单一方法契约。
为什么我们在实现 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 也只是让编译器强制执行单一方法契约。