Java Lambda表達(dá)式的方法引用和構(gòu)造器引用實例分析
本文實例講述了Java Lambda表達(dá)式的方法引用和構(gòu)造器引用。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
如果Lambda表達(dá)式的代碼塊只有一條代碼,還可以在代碼塊中使用方法引用和構(gòu)造器引用,以使得Lambda表達(dá)式更加簡潔。
|
種類 |
示例 |
說明 |
對應(yīng)的Lambda表達(dá)式 |
|
引用類方法 |
類名::類方法 |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該類方法作為參數(shù)。 |
(a,b,...) -> 類名.類方法(a,b, ...) |
|
引用特定對象的實例方法 |
特定對象::實例方法 |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 |
(a,b, ...) -> 特定對象.實例方法(a,b, ...) |
|
引用某類對象的實例方法 |
類名::實例方法 |
函數(shù)式接口中被實現(xiàn)方法的第一個參數(shù)作為調(diào)用者,后面的參數(shù)全部傳給該方法作為參數(shù)。 |
(a,b, ...) ->a.實例方法(b, ...) |
|
引用構(gòu)造器 |
類名::new |
函數(shù)式接口中被實現(xiàn)方法的全部參數(shù)傳給該構(gòu)造器作為參數(shù)。 |
(a,b, ...) ->new 類名(a,b, ...) |
二 實戰(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對象
// Converter converter1 = from -> Integer.valueOf(from);
// 方法引用代替Lambda表達(dá)式:引用類方法。
// 函數(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對象
// Converter converter2 = from -> "fkit.org".indexOf(from);
// 方法引用代替Lambda表達(dá)式:引用特定對象的實例方法。
// 函數(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對象
// MyTest mt = (a , b , c) -> a.substring(b , c);
// 方法引用代替Lambda表達(dá)式:引用某類對象的實例方法。
// 函數(shù)式接口中被實現(xiàn)方法的第一個參數(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對象
// YourTest yt = (String a) -> new JFrame(a);
// 構(gòu)造器引用代替Lambda表達(dá)式。
// 函數(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ìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
Java超詳細(xì)講解多線程中的Process與Thread
進(jìn)程process:在一定的環(huán)境下,把靜態(tài)的程序代碼運(yùn)行起來,通過使用不同的資源,來完成一定的任務(wù);線程thread:是程序中一個單一的順序控制流程。在單個進(jìn)程中同時運(yùn)行多個線程完成不同的工作,稱為多線程2022-05-05
JAXB命名空間及前綴_動力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
SpringCloud之微服務(wù)容錯的實現(xiàn)
這篇文章主要介紹了SpringCloud之微服務(wù)容錯的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
細(xì)談java同步之JMM(Java Memory Model)
Java內(nèi)存模型是在硬件內(nèi)存模型上的更高層的抽象,它屏蔽了各種硬件和操作系統(tǒng)訪問的差異性,保證了Java程序在各種平臺下對內(nèi)存的訪問都能達(dá)到一致的效果。下面我們來一起學(xué)習(xí)下JMM2019-05-05

