3 回答
TA貢獻(xiàn)1813條經(jīng)驗(yàn) 獲得超2個(gè)贊
問(wèn)題是,這Data::isEven是一個(gè)相當(dāng)于data -> data.isEven()predicate 的方法引用:
Predicate<Data>?predicate?=?data?->?data.isEven(); //?is?the?same?as Predicate<Data>?predicate=?Data::isEven;
這在JLS 15.13:
ExpressionName實(shí)例方法(第 15.12.4.1 節(jié))的目標(biāo)引用可以通過(guò)使用、 aPrimary或 的方法引用表達(dá)式來(lái)提供,super也可以稍后在調(diào)用方法時(shí)提供。....
方法引用表達(dá)式的求值會(huì)生成函數(shù)接口類型的實(shí)例(第 9.8 節(jié))。方法引用求值不會(huì)導(dǎo)致對(duì)應(yīng)方法的執(zhí)行;相反,這可能會(huì)在稍后調(diào)用功能接口的適當(dāng)方法時(shí)發(fā)生。
在您的情況下是對(duì)對(duì)象實(shí)例方法的Data::isEven引用。isEvenData
TA貢獻(xiàn)1775條經(jīng)驗(yàn) 獲得超11個(gè)贊
Data::isEven是一個(gè)Predicate.
要調(diào)用此方法,您必須傳遞值,例如:myData.isEven()。這本來(lái)就是一樣的isEven(myData)。因此,區(qū)別僅在于語(yǔ)法(參數(shù)在點(diǎn)之前或括號(hào)內(nèi)),但在語(yǔ)義上是相同的。
因此isEven是 aPredicate<Data>因?yàn)樗邮?code>Data并返回Boolean。
TA貢獻(xiàn)1951條經(jīng)驗(yàn) 獲得超3個(gè)贊
正如其他人所寫(xiě),“Data::isEven”或“data -> data.isEven()”在這里是謂詞。當(dāng)我們調(diào)用此謂詞的測(cè)試方法時(shí),我們將數(shù)據(jù)實(shí)例(您有此類實(shí)例的流)作為參數(shù)傳遞到那里。
添加回答
舉報(bào)
