更新時間:2018-07-06 來源:黑馬程序員JavaEE培訓(xùn)學(xué)院 瀏覽量:
內(nèi)容簡介:
方法引用Demo詳解
通過5種語法使用方法引用
方法引用使用總結(jié)
1. 在Java8中方法引用Demo詳解
1.1 方法引用出現(xiàn)的背景
在使用Lambda表達式的時候,我們實際上傳遞進去的代碼就是一種解決方案:拿什么參數(shù)做什么操作。
那么考慮一種情況:如果我們在Lambda中所指定的操作方案,已經(jīng)有地方存在相同方案,那是否還有必要再寫重復(fù)邏輯呢?

1.2 問題的引出

1.3 問題的發(fā)現(xiàn)與解決
這段代碼的問題在于,對String進行控制臺打印輸出的操作方案,明明已經(jīng)有了現(xiàn)成的實現(xiàn),那就是System.out對象中的println(String)方法。既然Lambda希望做的事情就是調(diào)用println(String)方法,那何必自己手動調(diào)用呢?
能否省去Lambda的語法格式(盡管它已經(jīng)相當(dāng)簡潔)呢?只要“路由”過去就好了:

1.4 方法引用案例的總結(jié)
以上例中,System.out對象中有一個重載的println(String)方法恰好就是我們所需要的。那么對于printString方法的函數(shù)式接口參數(shù),對比下面兩種寫法:
Lambda表達式:s -> System.out.println(s);
方法引用:System.out::println
第一種語義是指:拿到參數(shù)之后經(jīng)Lambda之手,繼而傳遞給System.out.println方法去處理。第二種等效寫法的語義是指:直接讓System.out中的println方法來取代Lambda。兩種寫法的執(zhí)行效果完全一樣,而第二種方法引用的寫法復(fù)用了已有方案,更加簡潔。1.5 引用運算符
雙冒號“::”為引用運算符,而它所在的表達式被稱為方法引用。如果Lambda要表達的函數(shù)方案已經(jīng)存在于某個方法的實現(xiàn)中,那么則可以通過雙冒號來引用該方法作為Lambda的替代者。
2.通過5種語法使用方法引用
2.1 通過對象名引用成員方法

2.2 通過類名引用靜態(tài)方法

2.3 通過類名引用成員方法
2.4 通過super引用成員方法

2.5通過this引用成員方法

3.方法引用使用總結(jié)
(1) Lambda表達式:s -> System.out.println(s); (2) 方法引用:System.out::println
第一種語義是指:拿到參數(shù)之后經(jīng)Lambda之手,繼而傳遞給System.out.println方法去處理。
第二種等效寫法的語義是指:直接讓System.out中的println方法來取代Lambda。
兩種寫法的執(zhí)行效果完全一樣,而第二種方法引用的寫法復(fù)用了已有方案,更加簡潔。
函數(shù)式接口是Lambda的基礎(chǔ),而方法引用是Lambda的孿生兄弟。
本文版權(quán)歸黑馬程序員JavaEE學(xué)院所有,歡迎轉(zhuǎn)載,轉(zhuǎn)載請注明作者出處。謝謝!
首發(fā):http://java.itheima.com/
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19