为什么在Java 8中将@FunctionalInterface注释添加到Comparator接口?

时间:2016-01-17 18:47:42

标签: java java-8

我理解使用Java的%u关键字添加了一堆带body的方法。我的问题是这个注释在哪里有用?我看到只允许使用这样的注释添加一个抽象方法。但比较器有两种抽象方法:

  • default
  • int compare(T o1, T o2);

另外,请解释一下这个注释的用法?我看到它是一个运行时注释,它的用途是什么?

2 个答案:

答案 0 :(得分:6)

来自documentation of FunctionalInterface

  

如果接口声明覆盖java.lang.Object的公共方法之一的抽象方法,那么也不会计入接口的抽象方法计数,因为接口的任何实现都将具有来自{的实现。 {1}}或其他地方。

由于java.lang.Object来自equals,因此不计算在内。它是与java.lang.Object相关的compare方法。

答案 1 :(得分:2)

这很有用,因为如果添加它并且在接口中有多个方法,则会出现编译错误。 @FunctionalInterface用于让Java知道这段代码可能被lambda表达式替换,因为每个lambda都是一些@FunctionalInterface的实现。它有助于编译器知道方法签名是什么。