精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
【Java】基礎48:方法引用之學習

今天是劉小愛自學Java的第48天。

感謝你的觀看,謝謝你。

話不多說,開始今天的學習:

昨天回顧了函數式編程的一些概念。

今天開始學習方法引用,它是lambda表達式的進一步簡化版,語法還要更加地簡潔。

一、方法引用

現有一個需求:

將一個字符串信息全部轉換成大寫字母,再打印出來。

利用函數式編程思想編寫代碼。

1.lambda表達式編寫

①函數式接口Printable

這是一個自定義的打印接口,有一個打印信息的抽象方法printMsg()

②lambda表達式

method方法中有兩個參數,用lambda表達式表示的是接口的實現類對象。并且在lambda表達式中,業務邏輯已經寫出來了。

什么叫業務邏輯?

我的理解是方法內容:根據什么參數得到了什么結果。

上述例子中就是:根據傳過來的字符串消息(也就是參數msg)

結果將msg全部變成大寫字母(msg.toUpperCase)

這就是業務邏輯,當然我舉的這個例子非常簡單,現實里肯定要復雜的多。

2.方法引用

方法引用是用來代替lambda表達式的,更加地簡潔,從某種意義上來說,它們的作用其實是差不多的。

①方法引用

具體格式為:new MyPrint()::printMsg

核心是這個雙冒號“::”,如何理解這個格式?

就可以理解成是MyPrint對象在調用printMsg方法。

為什么它能直接這樣使用?因為它的邏輯已經存在,也就是MyPrint類中有printMsg方法以及其業務邏輯

②業務邏輯

將字符串msg全部變成大寫字母,這就相當于是在MyPrint類中重寫了接口中的抽象方法。

3.方法引用和lambda表達式:

現在問題來了:方法引用不是對lambda表達式的簡化么?怎么感覺代碼還越來越繁瑣了?

我們只看①而言,方法引用要比lambda表達式簡單吧?

如果我使用方法引用,該業務邏輯無論被使用多少次,我只需要寫一次,其它時候直接調用;

如果我是用lambda表達式,我每調用一次就要將業務邏輯寫一遍。

所以方法引用的簡潔之處在于相同邏輯不需要重復地寫。

這樣理解下來,方法引用要比lambda表達式簡潔很多,尤其是在業務邏輯很復雜的時候

當然方法引用的前提:業務邏輯已經存在。

  • 如果邏輯已經存在,我直接使用方法引用即可,

  • 如果邏輯不存在,還是乖乖地寫lambda表達式。

二、方法引用的其它方式

上述例子中的方法引用是對象在引用方法,除了對象引用之外還有很多其它方式。

1.類名引用

如果是靜態方法,直接用類名就可以調用方法。

Java底層中已經寫好了很多工具類,其大多數方法都是靜態方法,直接使用方法引用會方便很多。

Math是一個工具類,它有一個靜態方法abs()。

所以方法引用直接用類名引用abs方法,因為其中的邏輯在Java底層就已經寫好了。

類名引用格式如下:

  • lambda表達式:number->Math.abs(number)

  • 方法引用:Math::abs

當然這里面方法引用也有一個局限性,比如說我現在要求得到10倍的絕對值。

lambda表達式直接改業務邏輯就好了;

但是方法引用沒辦法,因為Java底層沒有這樣的業務邏輯,就算要用方法引用,我們也得先將邏輯寫出來。

2.通過this引用成員方法

代碼這樣寫并不規范,只是為了好觀看,所以將它們寫在一起了。

this引用格式如下:

  • lambda表達式:name->this.introduce(name)

  • 方法引用:this::introduce

這里面this就是代表本類,本類中已經有introduce方法了,那我用this引用的就是本類中對應的方法。

3.通過super引用成員方法

如果MyClass有個父類,它里面有一個fuIntroduce方法,若是要引用該方法,可以使用super關鍵字。

使用方式和this是一樣的,就不再闡述了。

super引用格式如下:

  • lambda表達式:name->super.fuIntroduce(name)

  • 方法引用:super::fuIntroduce

super就是代表父類,父類中已經有fuIntroduce方法了,那我用super引用的就是父類中對應的方法。

4.類的構造器引用

類構造其格式如下:

  • lambda表達式:name->new Person(name)

  • 方法引用:Person::new

Person::new就相當于創建對象(new Person())

不要看這代碼寫的這么復雜,其實上就相當于new對象。

當然類的構造器這一塊理解的還不算透徹,暫且只需要記住方法引用這樣使用就是在創建對象就好了。

5.數組的構造器引用

數組也是Object的子類對象,所以同樣具有構造器,只是語法稍有不同。

數組構造器格式如下:

  • lambda表達式:length->new int[length]

  • 方法引用:int[]::new

和類的構造器是一樣的道理:

int[]::new就相當于創建數組(new int[length])

總結:

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
java 8新特性3——方法引用
Java核心技術 PDF 高清電子書
Java 8 Lambda 表達式學習心得總結
Java8初體驗(一)lambda表達式語法 | 并發編程網
【小家java】java8新特性(簡述十大新特性)
《寫給大忙人看的Java核心技術》讀后感
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 革吉县| 汝南县| 邵东县| 莱芜市| 庆云县| 虹口区| 定兴县| 西安市| 临湘市| 固阳县| 娄底市| 哈巴河县| 河东区| 锦屏县| 辽宁省| 资溪县| 开阳县| 清水县| 江华| 元朗区| 扬州市| 东安县| 水富县| 油尖旺区| 潞城市| 利辛县| 湖北省| 莱州市| 都昌县| 沈阳市| 广平县| 建昌县| 绥中县| 兰坪| 汾阳市| 杭锦后旗| 静安区| 克东县| 临海市| 安福县| 丹东市|