对特定类型的任意对象的实例方法的方法引用
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
- 为什么 "a"::compareToIgnoreCase 无法编译?如果我们可以说 String::compareToIgnoreCase 有一个隐式字符串参数 (this),为什么我们不能说 "a"::compareToIgnoreCase 有一个隐式 "a" 作为参数? (“a”比“第一”,“a”比“第二”.....)
"a"::compareToIgnoreCase
是对单个参数方法的方法引用,它将给定的 String
与 String
“a”进行比较。隐式参数始终等于“a”。
Comparator
的 Compare
方法需要两个给定的 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
String[] arr = {"First", "Second", "Third", "Fourth"};
Arrays.sort(arr, String::compareToIgnoreCase); //can compile
Arrays.sort(arr, "a"::compareToIgnoreCase); //can't compile
- 为什么 "a"::compareToIgnoreCase 无法编译?如果我们可以说 String::compareToIgnoreCase 有一个隐式字符串参数 (this),为什么我们不能说 "a"::compareToIgnoreCase 有一个隐式 "a" 作为参数? (“a”比“第一”,“a”比“第二”.....)
"a"::compareToIgnoreCase
是对单个参数方法的方法引用,它将给定的 String
与 String
“a”进行比较。隐式参数始终等于“a”。
Comparator
的 Compare
方法需要两个给定的 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