Java Lambda表達(dá)式的方法引用和構(gòu)造器引用實(shí)例分析
本文實(shí)例講述了Java Lambda表達(dá)式的方法引用和構(gòu)造器引用。分享給大家供大家參考,具體如下:
一 點(diǎn)睛
如果Lambda表達(dá)式的代碼塊只有一條代碼,還可以在代碼塊中使用方法引用和構(gòu)造器引用,以使得Lambda表達(dá)式更加簡(jiǎn)潔。
|
種類(lèi) |
示例 |
說(shuō)明 |
對(duì)應(yīng)的Lambda表達(dá)式 |
|
引用類(lèi)方法 |
類(lèi)名::類(lèi)方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該類(lèi)方法作為參數(shù)。 |
(a,b,...) -> 類(lèi)名.類(lèi)方法(a,b, ...) |
|
引用特定對(duì)象的實(shí)例方法 |
特定對(duì)象::實(shí)例方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該方法作為參數(shù)。 |
(a,b, ...) -> 特定對(duì)象.實(shí)例方法(a,b, ...) |
|
引用某類(lèi)對(duì)象的實(shí)例方法 |
類(lèi)名::實(shí)例方法 |
函數(shù)式接口中被實(shí)現(xiàn)方法的第一個(gè)參數(shù)作為調(diào)用者,后面的參數(shù)全部傳給該方法作為參數(shù)。 |
(a,b, ...) ->a.實(shí)例方法(b, ...) |
|
引用構(gòu)造器 |
類(lèi)名::new |
函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該構(gòu)造器作為參數(shù)。 |
(a,b, ...) ->new 類(lèi)名(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á)式:引用類(lèi)方法。
// 函數(shù)式接口中被實(shí)現(xiàn)方法的全部參數(shù)傳給該類(lèi)方法作為參數(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á)式:引用某類(lèi)對(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)容感興趣的讀者可查看本站專(zhuān)題:《Java面向?qū)ο蟪绦蛟O(shè)計(jì)入門(mén)與進(jìn)階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點(diǎn)技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對(duì)大家java程序設(shè)計(jì)有所幫助。
相關(guān)文章
使用java寫(xiě)的矩陣乘法實(shí)例(Strassen算法)
這篇文章主要給大家介紹了關(guān)于如何使用java寫(xiě)的矩陣乘法(Strassen算法)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
Java超詳細(xì)講解多線(xiàn)程中的Process與Thread
進(jìn)程process:在一定的環(huán)境下,把靜態(tài)的程序代碼運(yùn)行起來(lái),通過(guò)使用不同的資源,來(lái)完成一定的任務(wù);線(xiàn)程thread:是程序中一個(gè)單一的順序控制流程。在單個(gè)進(jìn)程中同時(shí)運(yùn)行多個(gè)線(xiàn)程完成不同的工作,稱(chēng)為多線(xiàn)程2022-05-05
JAXB命名空間及前綴_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
這篇文章主要給大家介紹了關(guān)于JAXB命名空間及前綴的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08
Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法
這篇文章主要介紹了Java實(shí)現(xiàn)英文句子中的單詞順序逆序輸出的方法,涉及java字符串遍歷、判斷、截取、輸出等相關(guān)操作技巧,需要的朋友可以參考下2018-01-01
SpringCloud之微服務(wù)容錯(cuò)的實(shí)現(xiàn)
這篇文章主要介紹了SpringCloud之微服務(wù)容錯(cuò)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-05-05
細(xì)談java同步之JMM(Java Memory Model)
Java內(nèi)存模型是在硬件內(nèi)存模型上的更高層的抽象,它屏蔽了各種硬件和操作系統(tǒng)訪(fǎng)問(wèn)的差異性,保證了Java程序在各種平臺(tái)下對(duì)內(nèi)存的訪(fǎng)問(wèn)都能達(dá)到一致的效果。下面我們來(lái)一起學(xué)習(xí)下JMM2019-05-05
測(cè)量Java對(duì)象所占內(nèi)存大小方式
這篇文章主要介紹了測(cè)量Java對(duì)象所占內(nèi)存大小方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09

