How does Java know which String::compareTo method reference to use when calling Collections.sort(someListOfStrings, String::compareTo);? comp
Suppose that you use method reference for Comparator interface:
Comparator cmp = String::compareTo;
When you call the cmp.compare(left, right) (which is "single abstract method" or "SAM" of Comparator interface), the magic occurs:
int result = cmp.compare(left, right);
| |
/------------------------/ |
| /---------------/
| |
left.compareTo(right);
Basically all the parameters of SAM are converted to the parameters of the referred method, but this object (which is on the left side) is also counted as parameter.