我有以下代碼: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