亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 8謂詞

Java 8謂詞

千萬里不及你 2021-05-14 14:15:01
這是一個以謂詞為參數的示例方法:void processFields(List<WebDataField> fields, Predicate<WebDataField> predicate) {    for (WebDataField webDataField : fields) {        boolean expectedCondition = predicate.test(webDataField);    }}我將上述函數稱為:processFields(fields, w -> w.getFieldName().length() > 5);另一個功能:public void doSomething(Object someObject,Predicate<T> predicateInstance){    //doSomething method's code goes here}在調用方,方法doSomething()將像這樣被調用–doSomething(someObjectInstance, Integer i-> i>10)我檢查了Java 8文檔中的String / Integer / Object等,但沒有發現實現Predicate<T>接口的這些類中的任何一個。我不知道我在Java 8教程系列中錯過了什么,但是我無法得到這種現象:如果目標類型與Predicate類沒有直接關系,編譯器如何允許lambda表達式?上述兩種情況的答案是否相同?
查看完整描述

2 回答

?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

lambda表達式的(Integer i) -> i>1值不是Integer,因此Integer不必實現Predicate即可將該lambda表達式傳遞給您的方法。

Integerilambda表達式的參數類型。(Integer i) -> i>1可以表示具有單個方法的任何功能接口,該方法帶有一個Integer參數并返回boolean。因此,它適合Predicate<Integer>功能接口。

您的另一個lambda表達式--w -> w.getFieldName().length() > 5接受未指定類型的參數,并返回boolean。為了使其能夠通過編譯,編譯器必須推斷類型為w具有getFieldName()方法的某個類或接口,該類或接口將返回具有方法的某種類型的實例length()。當您將lambda表達式傳遞給processFields需要a的方法時,Predicate<WebDataField>編譯器可以推斷出lambda表達式的參數類型wWebDataField。


查看完整回答
反對 回復 2021-05-19
  • 2 回答
  • 0 關注
  • 155 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號