Java 8中功能接口的定义说:
功能性接口被定义为具有任何接口恰好 一个明确声明的抽象方法。(由于接口可能具有非抽象的默认方法,因此必须进行限定。)这就是为什么功能接口以前称为“单一抽象 方法(SAM)”接口的原因,该术语有时仍然可见。
那么我们为什么这样:
List temperature =
new ArrayList(Arrays.asList(new Double[] { 20.0, 22.0, 22.5 }));
temperature.sort((a, b) -> a > b ? -1 : 1);
作为中的sort方法List是:
default void sort(Comparator super E> c) {
Object[] a = this.toArray();
Arrays.sort(a, (Comparator) c);
ListIterator i = this.listIterator();
for (Object e : a) {
i.next();
i.set((E) e);
}
}
lambda表达式表示:
Lambda表达式应可分配给功能接口
该Comparator接口有两个抽象方法,分别是compare和equals并用注释@FunctionalInterface。这是否违反了仅具有一种抽象方法的功能接口的定义?