農林漁牧網

您現在的位置是:首頁 > 漁業

方法引用:使用起來最簡潔的Java語法

2022-08-27由 劉小愛 發表于 漁業

java絕對值怎麼表示

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

感謝你的觀看,謝謝你。

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

方法引用:使用起來最簡潔的Java語法

昨天回顧了函數語言程式設計的一些概念。

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

一、方法引用

現有一個需求:

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

利用函數語言程式設計思想編寫程式碼。

1.lambda表示式編寫

方法引用:使用起來最簡潔的Java語法

①函式式介面Printable

這是一個自定義的列印介面,有一個列印資訊的抽象方法printMsg()

②lambda表示式

method方法中有兩個引數,用lambda表示式表示的是介面的實現類物件。並且在lambda表示式中,業務邏輯已經寫出來了。

什麼叫業務邏輯?

我的理解是

方法內容:根據什麼引數得到了什麼結果。

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

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

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

2.方法引用

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

方法引用:使用起來最簡潔的Java語法

①方法引用

具體格式為:

new MyPrint()::printMsg

核心是這個

雙冒號“::”

,如何理解這個格式?

就可以理解成是

MyPrint物件

在呼叫

printMsg方法

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

②業務邏輯

將字串msg全部變成大寫字母,這就

相當於

是在MyPrint類中重寫了介面中的抽象方法。

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

方法引用:使用起來最簡潔的Java語法

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

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

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

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

所以方法引用的簡潔之處在於

相同邏輯不需要重複地寫

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

當然方法引用的前提:

業務邏輯已經存在

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

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

二、方法引用的其它方式

上述例子中的方法引用是

物件

在引用方法,除了物件引用之外還有很多其它方式。

1.類名引用

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

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

方法引用:使用起來最簡潔的Java語法

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

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

類名引用格式如下:

lambda表示式:number->Math。abs(number)

方法引用:Math::abs

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

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

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

2.透過this引用成員方法

方法引用:使用起來最簡潔的Java語法

程式碼這樣寫並不規範,只是為了好觀看,所以將它們寫在一起了。

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.類的構造器引用

方法引用:使用起來最簡潔的Java語法

類構造其格式如下:

lambda表示式:name->new Person(name)

方法引用:Person::new

Person::new

就相當於建立物件(new Person())

不要看這程式碼寫的這麼複雜,其實上就相當於new物件。

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

5.陣列的構造器引用

陣列也是Object的子類物件,所以同樣具有構造器,只是語法稍有不同。

方法引用:使用起來最簡潔的Java語法

陣列構造器格式如下:

lambda表示式:length->new int[length]

方法引用:int[]::new

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

int[]::new

就相當於建立陣列(new int[length])

總結:

方法引用:使用起來最簡潔的Java語法