摘要:上一篇小樂(lè)介紹了新特性函數(shù)式接口,大家可以點(diǎn)擊回顧。中引入方法引用新特性用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,方法引用是用來(lái)直接訪(fǎng)問(wèn)類(lèi)或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。
上一篇小樂(lè)介紹了《Java8新特性-函數(shù)式接口》,大家可以點(diǎn)擊回顧。這篇文章將接著介紹Java8新特性之方法引用。
Java8 中引入方法引用新特性,用于簡(jiǎn)化應(yīng)用對(duì)象方法的調(diào)用,?方法引用是用來(lái)直接訪(fǎng)問(wèn)類(lèi)或者實(shí)例的已經(jīng)存在的方法或者構(gòu)造方法。 方法引用提供了一種引用而不執(zhí)行方法的方式,它需要由兼容的函數(shù)式接口構(gòu)成的目標(biāo)類(lèi)型上下文。計(jì)算時(shí),方法引用會(huì)創(chuàng)建函數(shù)式接口的一個(gè)實(shí)例。 當(dāng)Lambda表達(dá)式中只是執(zhí)行一個(gè)方法調(diào)用時(shí),不用Lambda表達(dá)式,直接通過(guò)方法引用的形式可讀性更高一些。方法引用是一種更簡(jiǎn)潔易懂的Lambda表達(dá)式。
1、基本格式方法引用使用一對(duì)冒號(hào)?:: 來(lái)簡(jiǎn)化對(duì)象方法的調(diào)用,當(dāng)你想要使用方法引用時(shí),目標(biāo)引用放在分隔符 :: 前,方法名稱(chēng)放在后面, 如下形式:
方法引用參考示例:
Java8 中對(duì)于方法引用主要分為三大類(lèi):
構(gòu)造器引用 Class::new
靜態(tài)方法引用 Class::static_method
特定對(duì)象的方法引用 instance::method
2.1、構(gòu)造器引用
語(yǔ)法是Class::new,或者更一般的Class< T >::new實(shí)例如下
借助構(gòu)造器引用實(shí)例化Iphone 對(duì)象,代碼如下:
public class IPhone { private Integer id; private String version; private Date createTime; private String name; public IPhone() { } public IPhone(Integer id) { this.id = id; } public IPhone(Integer id, String name) { this.id = id; this.name = name; } ... } public static void main(String[] args) { /** * 構(gòu)造器引用 * 無(wú)參構(gòu)造器 */ // 實(shí)現(xiàn)Supplier 接口 通過(guò)構(gòu)造器引用 Supplier2.2、靜態(tài)方法引用factory01= IPhone::new; IPhone p01 = factory01.get(); System.out.println(p01); /** * 等價(jià)的Lambda 寫(xiě)法 */ Supplier factory02 = ()->new IPhone(); IPhone p02 = factory02.get(); System.out.println(p02); /** * 當(dāng)構(gòu)造器方法存在參數(shù) 參數(shù)個(gè)數(shù)為1個(gè)時(shí) */ Function factory03 = IPhone::new; IPhone p03 = factory03.apply(2019); System.out.println(p03); /** * 等價(jià)的Lambda 寫(xiě)法 */ Function factory04 = (id)-> new IPhone(id); IPhone p04 = factory04.apply(2019); System.out.println(p04); /** * 當(dāng)構(gòu)造器方法存在參數(shù) 參數(shù)個(gè)數(shù)為2個(gè)時(shí) */ BiFunction factory05 = IPhone::new; IPhone p05 = factory05.apply(2019,"iphoneX"); System.out.println(p05); /** * 等價(jià)的Lambda 寫(xiě)法 */ BiFunction factory06 = (id,name)-> new IPhone(id,name); IPhone p06 = factory06.apply(2019,"iphoneMax"); System.out.println(p06); /** 當(dāng)構(gòu)造器參數(shù)參過(guò)2個(gè)時(shí)怎么解決呢??? **/ }
語(yǔ)法是Class::static_method,實(shí)例如下:
使用靜態(tài)方法引用 執(zhí)行IPhone 靜態(tài)方法
public class IPhone { private Integer id; private String version; private Date createTime; private String name; public IPhone() { } public IPhone(Integer id) { this.id = id; } public IPhone(Integer id, String name) { this.id = id; this.name = name; } /** 靜態(tài)方法 */ public static void info(){ System.out.println("這是一部IPhone"); } } /** * 定義函數(shù)式接口 */ @FunctionalInterface public interface PrintFunction{ void print(); } // 靜態(tài)方法引用 PrintFunction pf01= IPhone::info; pf01.print(); /** * 等價(jià)的Lambda 寫(xiě)法 */ PrintFunction pf02 = () -> { IPhone.info(); }; pf02.print(); // 靜態(tài)方法引用 靜態(tài)方法存在參數(shù)時(shí) /** * 定義函數(shù)式接口 */ @FunctionalInterface public interface PrintFunction022.3、特定類(lèi)的任意實(shí)例化對(duì)象的方法引用{ R print(T t); } /** * 靜態(tài)方法引用 方法存在參數(shù)時(shí) */ PrintFunction02 pf03 = IPhone::getPrice; System.out.println(pf03.print("iphone")); /** * 等價(jià)的Lambda 寫(xiě)法 */ PrintFunction02 pf04 =(str)->{ return IPhone.getPrice(str); };
語(yǔ)法是instance::method ,此時(shí)引用方法時(shí)必須存在實(shí)例,示例代碼如下:
/** * 構(gòu)造器引用 實(shí)例化對(duì)象 * 成員方法引用 */ BiFunction2.4 類(lèi)的成員方法引用factory07= IPhone::new; IPhone p07 = factory07.apply(2019,"iphoneX"); PrintFunction pp= p07::mm; pp.print(); /** * 等價(jià)的Lambda 寫(xiě)法 */ BiFunction factory08 = (id,name)-> new IPhone(id,name); IPhone p08 = factory08.apply(2019,"iphoneMax"); PrintFunction pp02 = ()->{ p08.mm(); }; pp02.print();
(略)
接下來(lái),小樂(lè)會(huì)繼續(xù)介紹Java8新特性之Stream,敬請(qǐng)期待。歡迎關(guān)注樂(lè)字節(jié),記得評(píng)論點(diǎn)贊哦。
轉(zhuǎn)發(fā)請(qǐng)記得注明出處和作者。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/77476.html
摘要:大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解又一核心特性方法引用。方法引用是一種更簡(jiǎn)潔易懂的表達(dá)式。感謝光臨閱讀小樂(lè)的,敬請(qǐng)關(guān)注樂(lè)字節(jié)后續(xù)將繼續(xù)講述等前沿知識(shí)技術(shù)。 大家好,我是樂(lè)字節(jié)的小樂(lè),上一次我們說(shuō)到了Java8核心特性之函數(shù)式接口,接下來(lái)我們繼續(xù)了解Java8又一核心特性——方法引用。 showImg(https://segmentfaul...
摘要:需要注意的是很多流操作本身就會(huì)返回一個(gè)流,所以多個(gè)操作可以直接連接起來(lái),如下圖這樣,操作可以進(jìn)行鏈?zhǔn)秸{(diào)用,并且并行流還可以實(shí)現(xiàn)數(shù)據(jù)流并行處理操作。為集合創(chuàng)建并行流。 上一篇文章,小樂(lè)給大家介紹了《Java8新特性之方法引用》,下面接下來(lái)小樂(lè)將會(huì)給大家介紹Java8新特性之Stream,稱(chēng)之為流,本篇文章為上半部分。 1、什么是流? Java Se中對(duì)于流的操作有輸入輸出IO流,而Jav...
摘要:上一篇小樂(lè)帶大家學(xué)過(guò)新特性表達(dá)式,什么時(shí)候可以使用通常表達(dá)式是用在函數(shù)式接口上使用的。使用實(shí)現(xiàn)創(chuàng)建產(chǎn)生一個(gè)工廠對(duì)象以上就是小樂(lè)帶給大家的新特性之函數(shù)式接口,下一篇將會(huì)為大家?guī)?lái)新特性之方法引用,敬請(qǐng)關(guān)注。 上一篇小樂(lè)帶大家學(xué)過(guò) Java8新特性-Lambda表達(dá)式,什么時(shí)候可以使用Lambda?通常Lambda表達(dá)式是用在函數(shù)式接口上使用的。從Java8開(kāi)始引入了函數(shù)式接口,其說(shuō)明比較...
摘要:注意當(dāng)多個(gè)父接口中存在相同的默認(rèn)方法時(shí),子類(lèi)中以就近原則繼承。定義靜態(tài)默認(rèn)方法這是版簡(jiǎn)易計(jì)算器接口默認(rèn)方法使用定義接口并提供默認(rèn)打印方法定義接口默認(rèn)方法支持方法形參這是數(shù)值運(yùn)算基本接口。。。 總概 JAVA8 已經(jīng)發(fā)布很久,而且毫無(wú)疑問(wèn),java8是自java5(2004年發(fā)布)之后的最重要的版本。其中包括語(yǔ)言、編譯器、庫(kù)、工具和JVM等諸多方面的新特性。 Java8 新特性列表如下:...
摘要:上一篇小樂(lè)給大家說(shuō)了樂(lè)字節(jié)新特性之,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)新特性之和重復(fù)注解與類(lèi)型注解。內(nèi)部類(lèi)與方法相關(guān)的內(nèi)部類(lèi)這是一個(gè)靜態(tài)類(lèi)。也是一個(gè)靜態(tài)類(lèi)。 上一篇小樂(lè)給大家說(shuō)了《樂(lè)字節(jié)-Java8新特性之Date API》,接下來(lái)小樂(lè)繼續(xù)給大家說(shuō)一說(shuō)Java8新特性之Base64和重復(fù)注解與類(lèi)型注解。 一、Base64 在Java 8中,內(nèi)置了Base64編解碼相關(guān)的特性。Java 8中使用...
閱讀 2222·2021-09-24 10:31
閱讀 3875·2021-09-22 15:16
閱讀 3395·2021-09-22 10:02
閱讀 1010·2021-09-22 10:02
閱讀 1822·2021-09-08 09:36
閱讀 1974·2019-08-30 14:18
閱讀 609·2019-08-30 10:51
閱讀 1863·2019-08-29 11:08