3 回答

TA貢獻1813條經(jīng)驗 獲得超2個贊
問題是,這Data::isEven
是一個相當(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
實例方法(第 15.12.4.1 節(jié))的目標(biāo)引用可以通過使用、 aPrimary
或 的方法引用表達式來提供,super
也可以稍后在調(diào)用方法時提供。....
方法引用表達式的求值會生成函數(shù)接口類型的實例(第 9.8 節(jié))。方法引用求值不會導(dǎo)致對應(yīng)方法的執(zhí)行;相反,這可能會在稍后調(diào)用功能接口的適當(dāng)方法時發(fā)生。
在您的情況下是對對象實例方法的Data::isEven
引用。isEven
Data

TA貢獻1775條經(jīng)驗 獲得超11個贊
Data::isEven
是一個Predicate
.
要調(diào)用此方法,您必須傳遞值,例如:myData.isEven()
。這本來就是一樣的isEven(myData)
。因此,區(qū)別僅在于語法(參數(shù)在點之前或括號內(nèi)),但在語義上是相同的。
因此isEven
是 aPredicate<Data>
因為它接受Data
并返回Boolean
。

TA貢獻1951條經(jīng)驗 獲得超3個贊
正如其他人所寫,“Data::isEven”或“data -> data.isEven()”在這里是謂詞。當(dāng)我們調(diào)用此謂詞的測試方法時,我們將數(shù)據(jù)實例(您有此類實例的流)作為參數(shù)傳遞到那里。
添加回答
舉報