更新時(shí)間:2018-07-06 來源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:
內(nèi)容簡(jiǎn)介:
方法引用Demo詳解
通過5種語法使用方法引用
方法引用使用總結(jié)
1. 在Java8中方法引用Demo詳解
1.1 方法引用出現(xiàn)的背景
在使用Lambda表達(dá)式的時(shí)候,我們實(shí)際上傳遞進(jìn)去的代碼就是一種解決方案:拿什么參數(shù)做什么操作。
那么考慮一種情況:如果我們?cè)贚ambda中所指定的操作方案,已經(jīng)有地方存在相同方案,那是否還有必要再寫重復(fù)邏輯呢?
1.2 問題的引出
1.3 問題的發(fā)現(xiàn)與解決
這段代碼的問題在于,對(duì)String進(jìn)行控制臺(tái)打印輸出的操作方案,明明已經(jīng)有了現(xiàn)成的實(shí)現(xiàn),那就是System.out對(duì)象中的println(String)方法。既然Lambda希望做的事情就是調(diào)用println(String)方法,那何必自己手動(dòng)調(diào)用呢?
能否省去Lambda的語法格式(盡管它已經(jīng)相當(dāng)簡(jiǎn)潔)呢?只要“路由”過去就好了:
1.4 方法引用案例的總結(jié)
以上例中,System.out對(duì)象中有一個(gè)重載的println(String)方法恰好就是我們所需要的。那么對(duì)于printString方法的函數(shù)式接口參數(shù),對(duì)比下面兩種寫法:
Lambda表達(dá)式:s -> System.out.println(s);
方法引用:System.out::println
第一種語義是指:拿到參數(shù)之后經(jīng)Lambda之手,繼而傳遞給System.out.println方法去處理。第二種等效寫法的語義是指:直接讓System.out中的println方法來取代Lambda。兩種寫法的執(zhí)行效果完全一樣,而第二種方法引用的寫法復(fù)用了已有方案,更加簡(jiǎn)潔。1.5 引用運(yùn)算符
雙冒號(hào)“::”為引用運(yùn)算符,而它所在的表達(dá)式被稱為方法引用。如果Lambda要表達(dá)的函數(shù)方案已經(jīng)存在于某個(gè)方法的實(shí)現(xiàn)中,那么則可以通過雙冒號(hào)來引用該方法作為L(zhǎng)ambda的替代者。
2.通過5種語法使用方法引用
2.1 通過對(duì)象名引用成員方法
2.2 通過類名引用靜態(tài)方法
2.3 通過類名引用成員方法
2.4 通過super引用成員方法
2.5通過this引用成員方法
3.方法引用使用總結(jié)
(1) Lambda表達(dá)式:s -> System.out.println(s); (2) 方法引用:System.out::println
第一種語義是指:拿到參數(shù)之后經(jīng)Lambda之手,繼而傳遞給System.out.println方法去處理。
第二種等效寫法的語義是指:直接讓System.out中的println方法來取代Lambda。
兩種寫法的執(zhí)行效果完全一樣,而第二種方法引用的寫法復(fù)用了已有方案,更加簡(jiǎn)潔。
函數(shù)式接口是Lambda的基礎(chǔ),而方法引用是Lambda的孿生兄弟。
本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請(qǐng)注明作者出處。謝謝!
首發(fā):http://java.itheima.com/