How does Java 8 know which String::compareTo method reference to use when sorting?

后端 未结 2 1366
北恋
北恋 2021-01-02 10:05

How does Java know which String::compareTo method reference to use when calling Collections.sort(someListOfStrings, String::compareTo);? comp

2条回答
  •  佛祖请我去吃肉
    2021-01-02 10:17

    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.

提交回复
热议问题