我对“特定类型的任意对象的实例方法引用”的概念感到困惑。Oracle的文档提供了一个相关示例:
String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);
我看到的这种方法引用的大多数示例都是像这样的:如果lambda表达式是这样的:x -> x.func()
,那么您可以将其写成 ClassOfX::func
。文档中的示例说:
方法引用String::compareToIgnoreCase的等效lambda表达式将具有形式参数列表(String a,String b),其中a和b是任意名称,用于更好地描述此示例。方法引用将调用方法a.compareToIgnoreCase(b)。
问题是:对于任何两个参数的lambda,例如(a,b) -> a.func(b)
,func
方法必须是lambda的第一个参数的实例方法,并且lambda的第二个参数将作为参数传递给该方法吗?如果我们有多个参数的lambda,那么func
方法必须是lambda的第一个参数的实例方法,并且lambda的其他参数将按照它们在lambda中出现的顺序传递给func
吗?我的意思是,我们可以将(a,b,c) -> a.func(b,c)
写成ClassOfA:: func
抱歉我的英语不好,我希望我已经清楚地说明了问题。
Functional methodRef = example::method;
会起作用呢?它确实可以工作,但我真的不太明白为什么。 - Paulo Guedes