对特定类型的任意对象的实例方法的方法引用

Method reference to an instance method of an arbitrary object of a particular type

String[] arr = {"First", "Second", "Third", "Fourth"};
Arrays.sort(arr, String::compareToIgnoreCase); //can compile
Arrays.sort(arr, "a"::compareToIgnoreCase); //can't compile
  1. 为什么 "a"::compareToIgnoreCase 无法编译?如果我们可以说 String::compareToIgnoreCase 有一个隐式字符串参数 (this),为什么我们不能说 "a"::compareToIgnoreCase 有一个隐式 "a" 作为参数? (“a”比“第一”,“a”比“第二”.....)

"a"::compareToIgnoreCase 是对单个参数方法的方法引用,它将给定的 StringString“a”进行比较。隐式参数始终等于“a”。

ComparatorCompare 方法需要两个给定的 String 实例。

也许如果将方法引用写成 lambda 表达式会更清楚:

Arrays.sort(arr, (a,b) -> a.compareToIgnoreCase(b)); //can compile

Arrays.sort(arr, (x) -> "a".compareToIgnoreCase(x)); // can't compile, since a method with 
                                                     // two arguments is expected