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);
}
我正在阅读有关 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);
}