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