我理解使用Java的%u
关键字添加了一堆带body的方法。我的问题是这个注释在哪里有用?我看到只允许使用这样的注释添加一个抽象方法。但比较器有两种抽象方法:
default
int compare(T o1, T o2);
另外,请解释一下这个注释的用法?我看到它是一个运行时注释,它的用途是什么?
答案 0 :(得分:6)
来自documentation of FunctionalInterface
:
如果接口声明覆盖
java.lang.Object
的公共方法之一的抽象方法,那么也不会计入接口的抽象方法计数,因为接口的任何实现都将具有来自{的实现。 {1}}或其他地方。
由于java.lang.Object
来自equals
,因此不计算在内。它是与java.lang.Object
相关的compare
方法。
答案 1 :(得分:2)
这很有用,因为如果添加它并且在接口中有多个方法,则会出现编译错误。
@FunctionalInterface
用于让Java知道这段代码可能被lambda表达式替换,因为每个lambda都是一些@FunctionalInterface
的实现。它有助于编译器知道方法签名是什么。