【Java8新特性】淺談方法引用和構(gòu)造器引用
寫在前面
Java8中一個(gè)很牛逼的新特性就是方法引用和構(gòu)造器引用,為什么說它很牛逼呢?往下看!
方法引用
當(dāng)要傳遞給Lambda體的操作,已經(jīng)有實(shí)現(xiàn)的方法了,可以使用方法引用!這里需要注意的是:實(shí)現(xiàn)抽象方法的參數(shù)列表,必須與方法引用方法的參數(shù)列表保持一致!
那么什么是方法引用呢?方法引用就是操作符“::”將方法名和對(duì)象或類的名字分隔開來。
有如下三種使用情況:
對(duì)象::實(shí)例方法
類::靜態(tài)方法
類::實(shí)例方法
這里,我們可以列舉幾個(gè)示例。
例如:
(x) -> System.out.println(x);
等同于:
System.out::println
例如:
BinaryOperator<Double> bo = (x, y) -> Math.pow(x, y);
等同于
BinaryOperator<Double> bo = Math::pow;
例如:
compare((x, y) -> x.equals(y), "binghe", "binghe")
等同于
compare(String::equals, "binghe", "binghe")
注意:當(dāng)需要引用方法的第一個(gè)參數(shù)是調(diào)用對(duì)象,并且第二個(gè)參數(shù)是需要引用方法的第二個(gè)參數(shù)(或無參數(shù))時(shí):ClassName::methodName 。
構(gòu)造器引用
格式如下所示:
ClassName::new
與函數(shù)式接口相結(jié)合,自動(dòng)與函數(shù)式接口中方法兼容??梢园褬?gòu)造器引用賦值給定義的方法,與構(gòu)造器參數(shù)列表要與接口中抽象方法的參數(shù)列表一致!
例如:
Function<Integer, MyClass> fun = (n) -> new MyClass(n);
等同于
Function<Integer, MyClass> fun = MyClass::new;
數(shù)組引用
格式如下所示。
type[]::new
例如:
Function<Integer, Integer[]> fun = (n) -> new Integer[n];
等同于
Function<Integer, Integer[]> fun = Integer[]::new;
寫在最后
最后,附上Java8新特性核心知識(shí)圖,祝大家在學(xué)習(xí)Java8新特性時(shí)少走彎路。
特別推薦一個(gè)分享架構(gòu)+算法的優(yōu)質(zhì)內(nèi)容,還沒關(guān)注的小伙伴,可以長(zhǎng)按關(guān)注一下:
長(zhǎng)按訂閱更多精彩▼
如有收獲,點(diǎn)個(gè)在看,誠摯感謝
免責(zé)聲明:本文內(nèi)容由21ic獲得授權(quán)后發(fā)布,版權(quán)歸原作者所有,本平臺(tái)僅提供信息存儲(chǔ)服務(wù)。文章僅代表作者個(gè)人觀點(diǎn),不代表本平臺(tái)立場(chǎng),如有問題,請(qǐng)聯(lián)系我們,謝謝!