我正在阅读有关java注释的信息,出现了一个新的疑问。
在文档中解释功能接口注释类型:
带有一个抽象方法声明的接口称为函数式interface.The编译器验证所有使用@FunctionalInterface注释的接口是否真正包含一个且仅包含一个抽象方法。如果使用此注释注释的接口不是函数式接口,则会生成编译时错误。在类、注释类型和枚举上使用此注释也是编译时错误。FunctionalInterface注释类型是标记接口。
我做了一些测试,不需要用这个注释类型标记接口。然后,我的问题是:如果具有一个方法的每个接口总是一个函数接口,为什么我需要这个注释?
// @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");
}
}
如果您遇到了这个问题,请先导入< code > Java . lang . functional interface 库,然后再像下面的示例那样放置< code>@FunctionInterface:
import java.lang.FunctionalInterface;
@FunctionalInterface
public interface GreetingFunction {
void sayMessage(String message);
}
您不必使用@FunctionalInterface
注释函数接口,但它记录了您创建函数接口的意图,如果接口不是函数接口(即只有一个非默认和非静态方法),它将生成编译错误。
它有点像@Override
:您不必使用它,但它会阻止您在重写方法时使用与父类不匹配的签名。
另请参阅:为什么JDK中所有符合条件的接口都没有使用@FunctionalInterface?
在学习 Lambda 表达式时,我们提到如果接口中只有一个抽象方法(可以包含多个默认方法或多个 static 方法),那么该接口就是函数式接口。@FunctionalInterface 就是用来指定某个接口必须是函数式接口,所以 @FunInterface 只能修饰接口,不能修饰其它程序元素。 函数式接口就是为 Java 8 的 Lambda 表达式准备的,Java 8 允许使用 Lambda 表
我正在使用注释处理器来处理方法参数的注释。 用于参数的注释类型有一个注释@参数 现在,当注释处理器运行时,我想检查参数注释()是否有参数注释。我通过执行以下代码来实现这一点。 由于某种原因,arg始终为空。是否有注释未返回的原因?
本文向大家介绍Java注释的类型。,包括了Java注释的类型。的使用技巧和注意事项,需要的朋友参考一下 Java支持单行,多行注释和文档注释。Javadoc工具可以理解文档注释,并可用于创建基于HTML的文档。 / **被称为文档注释。Javadoc工具在为程序代码创建文档时使用它。 / *用于多行注释。 //用于单行注释 示例
我有下面的课程。两个注释(AnnotA和AnnotB),一个类的子类。java'(带@AnnotA)及其“父”基。java'(带有@AnnotB)。 编译子对象时。java,我的注释处理器报告AnnotA,但它不报告在Base中找到的注释(AnnotB)。JAVA 安诺塔。JAVA 阿诺特。JAVA 基础JAVA 小孩JAVA MyProc。JAVA 这是编译过程及其输出,正如您所看到的,没有关于
我在注释中创建一些元数据结构时遇到了问题。我们使用注释来定义Hibernate实体属性的特殊属性,但它可能在任何地方都可以使用。我想创建表示这些结构的条件: 问题是我需要使用此注释定义一些“树”结构。这是我想达到的一些设计: 我想根据这个例子使用的所有这些注释: 我知道我在上面的注释定义中定义的那种继承是不可能的。但是,我该如何考虑我的注释和,或是在一个“家庭”中?
线程“main”java.lang.LinkageError:loader(sun/misc/launcher$AppClassLoader的实例):试图重复名称:“TestClass”的类定义 我正在尝试实现代理,如:easly-create-java-agents-with-bytebuddy中描述的示例所示 是否有一种方法可以加载Class对象而不导致此问题,或者使用传递给transform