我有以下代码:Java 8 BiPredicate自动调用第一个参数的方法?
public class BiPredicateTest {
public static void main(String[] args) {
BiPredicate<List<Integer>, Integer> listContains = List::contains;
List aList = Arrays.asList(10, 20, 30);
System.out.println(listContains.test(aList, 20)); // prints true magically?
}
}
在声明listContains.test(ALIST,20),它是如何的方法“包含”获取调用的第一个参数和第二个参数传入作为参数?东西等同于:
System.out.println(aList.contains(20));
换句话说,如何声明listContains.test(ALIST,20)会转换到aList.contains(20)?
java 8 BiPredicate是如何工作的?有人能解释魔法是如何发生的吗?
这不是重复的帖子。这不同于“什么是特定类型的任意对象”在java 8中的含义?“因为它没有明确地通过方法引用。在参考文章中,如何传递方法引用非常清楚。在其上调用方法的数组实例作为参数传递给Arrays.sort()。在我的情况下,如何在aList上调用“包含”方法并不明显。我正在寻找一个关于它如何工作的参考或解释。
看起来有些人更喜欢投票而不是提供参考或解释。他们给人的印象是他们有知识但拒绝分享。
它并不特定于“BiPredicate”。你可能想研究方法引用的工作方式。 – 4castle
@ 4castle感谢您的回复。我明白,调用BiPredicate引用'listContains'上的'test'方法将依次调用List :: contains方法。但是如何选择被调用的对象(本例中为aList)?在这个例子中并不完全清楚。你有没有使用BiPredicate的例子? – Ali
我发现[this reference](http://moandjiezana.com/blog/2014/understanding-method-references/)有用。看看“Desugaring Lambdas”一节。 – Enwired