Мне интересно, как все это с ссылками на методы и функциональными интерфейсами работает на более низком уровне. Самый простой пример - это где у нас есть список
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 принимает два параметра: List и Comparator. Поскольку Comparator является функциональным интерфейсом, его можно заменить на выражение lambda или ссылку на метод с той же сигнатурой (параметры и тип возврата). Итак, как это работает, мы можем передать также ссылку на compareTo, которая принимает только один параметр, а подписи этих методов не совпадают? Как ссылки на методы, переведенные в Java8?