興沖沖的刷完力扣準備去群里吹波水,結果被群友甩出來的一張圖打翻在原地。

 

函數式編程需要各位自行補充,lambda的使用(以前覺得自己對lambda了解的夠詳細了,真是在無知的時候不知道自己是無知)大家可以看我另一篇博客

學習jdk1.8的Lambda和Stream

 

言歸正傳,第一次看見這個寫法當場就蒙在了原地,為什么

biFunction=A::test1;
可以通過編譯?
明明這個方法只接受一個傳參,而我們函數編程傳遞兩個參數卻一樣可以呢?

這塊需要兩個知識點兼顧:
1.java隱藏關鍵字this
2.java8方法引用

首先在非靜態方法中,方法只能通過實例對象來進行調用,因此無法憑空使用一個方法,lambda會將我們傳遞的第一個參數作為當前方法的調用者。
到這里 我們就可以明白為什么方法只接受一個參數,而我們傳遞兩個的時候一樣可以正確執行。


那么就會出現第二個問題,為什么是第一個參數作為調用者而不是第二個第三個或者最后一個?
到這里就需要說道我們另一個知識,就是我們的隱藏關鍵字this
關于this的概念:我們知道this 是隱式參數, 類的方法被調用時,系統會自動隱式傳遞一個this參數給當前方法。
在方法中表示對象。
而這個隱式參數的位置就是在我們方法中參數列表的第一位,如下圖:

 

 

 

到此算是把我在群里的問題,迎刃而解。

寫的不夠好,希望大家多多海涵。