Comparator.comparing()的参数问题
源码中 Comparator.comparing()需要接收一个Function类型的参数:
public static <T, U extends Comparable<? super U>> Comparator<T> comparing(
Function<? super T, ? extends U> keyExtractor)
{
Objects.requireNonNull(keyExtractor);
return (Comparator<T> & Serializable)
(c1, c2) -> keyExtractor.apply(c1).compareTo(keyExtractor.apply(c2));
}
为何在时间使用时,可以传入Supplier类型的参数呢,如下
Supplier<String> colorStr = apple::getColor;
apples.sort(Comparator.comparing(Apple::getColor));
apple::getColor的返回值类型明明是Supplier类型的,居然可以出传入comparing方法中,而 Function和 Supplier 在源码中没有实现和继承等关系