【发布时间】:2019-02-22 09:38:46
【问题描述】:
我对“引用特定类型的任意对象的实例方法”背后的概念感到困惑。 Oracle documentation 有一个例子:
String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
我看到的这种方法参考的大多数例子都是这样的:如果 lambda 是这样的:x -> x.func(),那么你可以写成ClassOfX::func。文档中的示例说:
方法引用的等效 lambda 表达式 String::compareToIgnoreCase 将具有形式参数列表 (String a, String b),其中 a 和 b 是用于更好的任意名称 描述这个例子。方法引用将调用该方法 a.compareToIgnoreCase(b)。
问题是:对于任何两个参数 lambda,如 (a, b) -> a.func(b),func 方法必须是第一个参数的实例方法,而 lambda 的第二个参数将作为参数传递给该方法?如果我们有多个参数 lambda,那么 func 方法必须是 lambda 的第一个参数的实例方法,而 lambda 的其他参数将按照出现在 lambda 中的顺序传递给 func?我的意思是我们可以写ClassOfA::func而不是(a, b, c) -> a.func(b, c)
对不起我的英语。我希望我把问题说清楚了。
【问题讨论】: