Java Lambda表達(dá)式的方法引用和構(gòu)造器引用實(shí)例分析
本文實(shí)例講述了Java Lambda表達(dá)式的方法引用和構(gòu)造器引用。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
如果Lambda表達(dá)式的代碼塊只有一條代碼,還可以在代碼塊中使用方法引用和構(gòu)造器引用,以使得Lambda表達(dá)式更加簡潔。
種類 |
示例 |
說明 |
對(duì)應(yīng)的Lambda表達(dá)式 |
引用類方法 |
類名::類方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該類方法作為參數(shù)。 |
(a,b,...) -> 類名.類方法(a,b, ...) |
引用特定對(duì)象的實(shí)例方法 |
特定對(duì)象::實(shí)例方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 |
(a,b, ...) -> 特定對(duì)象.實(shí)例方法(a,b, ...) |
引用某類對(duì)象的實(shí)例方法 |
類名::實(shí)例方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的第一個(gè)參數(shù)作為調(diào)用者,后面的參數(shù)全部傳給該方法作為參數(shù)。 |
(a,b, ...) ->a.實(shí)例方法(b, ...) |
引用構(gòu)造器 |
類名::new |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該構(gòu)造器作為參數(shù)。 |
(a,b, ...) ->new 類名(a,b, ...) |
二 實(shí)戰(zhàn)
1 代碼
import javax.swing.*; @FunctionalInterface interface Converter{ Integer convert(String from); } @FunctionalInterface interface MyTest { String test(String a , int b , int c); } @FunctionalInterface interface YourTest { JFrame win(String title); } public class MethodRefer { public static void main(String[] args) { // 下面代碼使用Lambda表達(dá)式創(chuàng)建Converter對(duì)象 // Converter converter1 = from -> Integer.valueOf(from); // 方法引用代替Lambda表達(dá)式:引用類方法。 // 函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該類方法作為參數(shù)。 Converter converter1 = Integer::valueOf; Integer val = converter1.convert("99"); System.out.println(val); // 輸出整數(shù)99 // 下面代碼使用Lambda表達(dá)式創(chuàng)建Converter對(duì)象 // Converter converter2 = from -> "fkit.org".indexOf(from); // 方法引用代替Lambda表達(dá)式:引用特定對(duì)象的實(shí)例方法。 // 函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 Converter converter2 = "fkit.org"::indexOf; Integer value = converter2.convert("it"); System.out.println(value); // 輸出2 // 下面代碼使用Lambda表達(dá)式創(chuàng)建MyTest對(duì)象 // MyTest mt = (a , b , c) -> a.substring(b , c); // 方法引用代替Lambda表達(dá)式:引用某類對(duì)象的實(shí)例方法。 // 函數(shù)式接口中被實(shí)現(xiàn)方法的第一個(gè)參數(shù)作為調(diào)用者, // 后面的參數(shù)全部傳給該方法作為參數(shù)。 MyTest mt = String::substring; String str = mt.test("Java I Love you" , 2 , 9); System.out.println(str); // 輸出:va I Lo // 下面代碼使用Lambda表達(dá)式創(chuàng)建YourTest對(duì)象 // YourTest yt = (String a) -> new JFrame(a); // 構(gòu)造器引用代替Lambda表達(dá)式。 // 函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該構(gòu)造器作為參數(shù)。 YourTest yt = JFrame::new; JFrame jf = yt.win("我的窗口"); System.out.println(jf); } }
2 運(yùn)行
99
2
va I Lo
javax.swing.JFrame[frame0,0,0,0x0,invalid,hidden,layout=java.awt.BorderLayout,title=我的窗口,resizable,normal,defaultCloseOperation=HIDE_ON_CLOSE,rootPane=javax.swing.JRootPane[,0,0,0x0,invalid,layout=javax.swing.JRootPane$RootLayout,alignmentX=0.0,alignmentY=0.0,border=,flags=16777673,maximumSize=,minimumSize=,preferredSize=],rootPaneCheckingEnabled=true]
更多java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
spring boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文問題
這篇文章主要介紹了spring-boot 使用Aop通知打印控制器請(qǐng)求報(bào)文和返回報(bào)文,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2018-04-04詳解Spring中實(shí)現(xiàn)接口動(dòng)態(tài)的解決方法
最近在工作遇到的一個(gè),發(fā)現(xiàn)網(wǎng)上的資料較少,所以想著總結(jié)分享下,下面這篇文章主要給大家介紹了關(guān)于Spring中實(shí)現(xiàn)接口動(dòng)態(tài)的解決方法,文中通過完整的示例代碼給大家介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2017-07-07關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié)
這篇文章主要介紹了關(guān)于Linux服務(wù)器配置java環(huán)境遇到的問題小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12開放封閉原則_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要介紹了開放封閉原則,開放-封閉原則是面向?qū)ο笤O(shè)計(jì)的核心所在,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-08-08