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