Класс Stream
в Java 8 определяет метод max
, для которого требуется аргумент Comparator
. Вот подпись метода:
Optional<T> max(Comparator<? super T> comparator)
Comparator
- это функциональный интерфейс, который имеет абстрактный метод compare
с этой сигнатурой. Уведомление compare
требует 2 аргумента.
int compare(T o1, T o2)
Интерфейс Comparable
имеет абстрактный метод compareTo
с этой сигнатурой. Уведомление compareTo
требует только 1 аргумент.
int compareTo(T o)
В Java 8 следующий код работает отлично. Однако я ожидал ошибку компиляции типа "класс Integer не определяет compareTo (Integer, Integer)".
int max = Stream.of(0, 4, 1, 5).max(Integer::compareTo).get();
Может кто-нибудь объяснить, почему можно передать экземпляр Comparable
методу, который ожидает экземпляр Comparator
, даже если их сигнатуры методов несовместимы?