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

use*_*988 4 java java-8

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

  • int compare(T o1, T o2);
  • boolean equals(Object obj);

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

Mri*_*nal 6

来自以下文件FunctionalInterface:

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

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

  • 更准确地说,它的目的是_捕捉设计意图_.这里的具体设计意图是该接口描述独立行为(计算函数,分配资源等),因此用作lambdas和方法引用的目标类型是明智的. (2认同)