Java8特性:Lambda表達式之方法引用篇

Java自誕生已經有十幾個年頭了,目前也已經發布了第十三個大版本,其中Java8是常用的版本中最新的一個版本。而Java8最大的特性就是:Lambda表達式、函數式接口和Stream流。

本篇只介紹方法引用在Lambda表達式中的使用,至於別的方面不會提及。如果大家想了解Lambda表達式的基本概念,可以參考我的另一篇文章: 。如果大家想了解Lambda表達式的省略寫法,可以參考我的另一篇文章: 。由於我對方法引用也是一知半解,所以下面只寫幾個使用方法引用的例子給大家參考。

好了,廢話不多說,下面進入正題。

方法引用對於Java而言,僅僅可以使用在Lambda表達式中,而非如C++那樣應用廣泛。當然,方法引用使用的機會也不會很多。不過,瞭解一下也還是可以的。

在Java中方法引用有:普通方法引用、靜態方法引用、構造方法引用以及數組引用四種。

普通方法引用

對於普通方法引用來說,分兩種:對象::普通方法和類::普通方法

1. 對象::普通方法

為了演示普通方法引用,我需要先自定義一個函數式接口,定義的代碼如下:

Java8特性:Lambda表達式之方法引用篇

該段代碼的目的是將一個字符串轉換為整數數字。下面是使用對象::普通方法引用的實現方式。

Java8特性:Lambda表達式之方法引用篇

2.類::普通方法

為了演示類::普通方法這種方法引用,我還是按照老規矩定義一個函數式接口,定義的函數式接口如下:

Java8特性:Lambda表達式之方法引用篇

該段代碼的作用是根據傳入的兩個整型參數將傳入的字符串轉換成另一個字符串。使用類::普通方法引用的表示方式為:

Java8特性:Lambda表達式之方法引用篇

這裡需要強調的是,當通過類來調用其普通方法的時候,其第一個參數一般會作為調用對象,而其餘的參數則跟函數式接口的唯一抽象方法的參數保持一致即可。

靜態方法引用

對於靜態方法引用來說,其格式為:

類::靜態方法

測試本例子的時候我依然使用上面定義過的Conver函數式接口。測試例子如下:

Java8特性:Lambda表達式之方法引用篇

構造方法引用

構造方法引用的格式為:

類::new

為了測試構造方法引用,我還是需要聲明一個函數式接口,聲明後的函數式接口如下:

Java8特性:Lambda表達式之方法引用篇

該函數式接口的用途是通過接收一個整型數字,然後初始化出一個指定容量的集合。測試例子如下:

Java8特性:Lambda表達式之方法引用篇

數組引用

數組引用的格式為:

類[]::new

為了測試數組引用,我需要聲明一個函數式接口,聲明的函數式接口如下:

Java8特性:Lambda表達式之方法引用篇

對於數組引用的函數式接口的測試例子如下:

Java8特性:Lambda表達式之方法引用篇

至此方法引用已經介紹完畢。關於哪些場景該使用方法引用,我暫時也沒有發現一個特定的規律 。所以,我只舉幾個例子給大家參考。當然,方法使用的機會也不多,所以大家酌情使用。會則錦上添花,不會也無傷大雅。


分享到:


相關文章: