Ссылка на методы с разными параметрами в Java8

Мне интересно, как все это с ссылками на методы и функциональными интерфейсами работает на более низком уровне. Самый простой пример, где у нас есть список

List<String> list = new ArrayList<>();
list.add("b");
list.add("a");
list.add("c"):

Теперь мы хотим отсортировать его с помощью класса Collections, чтобы мы могли вызвать:

Collections.sort(list, String::compareToIgnoreCase);

Но если мы определим пользовательский компаратор, это может быть что-то вроде:

Comparator<String> customComp = new MyCustomOrderComparator<>();
Collections.sort(list, customComp::compare);

Проблема в том, что Collections.sort принимает два параметра: список и компаратор. Поскольку Comparator является функциональным интерфейсом, его можно заменить на лямбда-выражение или ссылку на метод с той же сигнатурой (параметры и тип возвращаемого значения). Итак, как это работает, что мы можем также передать ссылку на CompareTo, которая принимает только один параметр, а сигнатуры этих методов не совпадают? Как ссылки на методы переводятся в Java8?

Ответы на вопрос(1)

Ваш ответ на вопрос