2020久久超碰欧美精品最新亚洲欧美日韩久久精品,国产福利电影一区二区三区,亚洲欧美日韩一区在线观看,亚洲国产欧美日韩欧美特级,亚洲欧美日韩成人一区久久,欧美日韩精品一区二区三区不卡,国产欧美日韩va另类影音先锋,亚洲欧美日韩久久精品,亚洲欧美日韩国产成人精品影院,亚洲国产欧美日韩精品一区二区三区,欧美日韩国产成人高清视频,日韩久久精品国产免费观看频道,久久人人爽人人爽从片av高清,国产精品综合一区二区

首頁技術文章正文

Java8方法引用

更新時間:2018-07-06 來源:黑馬程序員JavaEE培訓學院 瀏覽量:

內容簡介:

方法引用Demo詳解

通過5種語法使用方法引用

方法引用使用總結


1. 在Java8中方法引用Demo詳解

1.1 方法引用出現的背景

在使用Lambda表達式的時候,我們實際上傳遞進去的代碼就是一種解決方案:拿什么參數做什么操作。

那么考慮一種情況:如果我們在Lambda中所指定的操作方案,已經有地方存在相同方案,那是否還有必要再寫重復邏輯呢?

1530863550290_111.png

1.2 問題的引出

1530863557071_222.png

1.3 問題的發現與解決

這段代碼的問題在于,對String進行控制臺打印輸出的操作方案,明明已經有了現成的實現,那就是System.out對象中的println(String)方法。既然Lambda希望做的事情就是調用println(String)方法,那何必自己手動調用呢?

能否省去Lambda的語法格式(盡管它已經相當簡潔)呢?只要“路由”過去就好了:

1530863566694_333.png

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 通過對象名引用成員方法

1530863609596_444.png

2.2 通過類名引用靜態方法

1530863603331_555.png

2.3 通過類名引用成員方法


2.4 通過super引用成員方法

1530863595629_666.png

2.5通過this引用成員方法

1530863590239_777.png

3.方法引用使用總結

        (1) Lambda表達式:s -> System.out.println(s);        (2) 方法引用:System.out::println


第一種語義是指:拿到參數之后經Lambda之手,繼而傳遞給System.out.println方法去處理。


第二種等效寫法的語義是指:直接讓System.out中的println方法來取代Lambda。

兩種寫法的執行效果完全一樣,而第二種方法引用的寫法復用了已有方案,更加簡潔。

函數式接口是Lambda的基礎,而方法引用是Lambda的孿生兄弟。

本文版權歸黑馬程序員JavaEE學院所有,歡迎轉載,轉載請注明作者出處。謝謝!

作者:黑馬程序員JavaEE培訓學院

首發:http://java.itheima.com/

分享到:
在線咨詢 我要報名
和我們在線交談!