Java 中的 FuntionalInterface 注释类型

FuntionalInterface Annotation Type in Java

我正在阅读有关 java 注释的内容,出现了一个新的疑问。

在文档中解释 FunctionalInterface 注释类型:

An interface with one abstract method declaration is known as a functional interface.The compiler verifies all interfaces annotated with a @FunctionalInterface that the interfaces really contain one and only one abstract method. A compile-time error is generated if the interfaces annotated with this annotation are not functional interfaces. It is also a compile-time error to use this annotation on classes, annotation types, and enums. The FunctionalInterface annotation type is a marker interface.

我做了一些测试,我不需要用这种注解类型来标记我的接口。然后,我的问题是:如果具有一种方法的每个接口始终是功能接口,为什么我需要此注释?

示例代码

// @FunctionalInterface
interface Wizard {
    int spell(String power);
}

class TestLambda {
    public static void main(String[] args) {
        Wizard gandalf = str -> str.length();
        int power = gandalf.spell(args[0]);
        System.out.println("The spell length is: " + power+ " points");
    }
}

不必 使用 @FunctionalInterface 注释功能接口,但它记录了您创建一个接口的意图,如果接口不是,则会生成编译错误一个功能接口(即只有一个非默认和非静态方法)。

有点像@Override:你不必使用它,但它会阻止你在覆盖方法时使用与父class不匹配的签名。

另请参阅:

如果您遇到此问题,请先导入 java.lang.FunctionalInterface 库,然后再放入 @FunctionInterface,如下例所示:

import java.lang.FunctionalInterface; 

@FunctionalInterface
public interface GreetingFunction {

    void sayMessage(String message);

}