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