【Java8新特性】淺談方法引用和構造器引用

寫在前面

Java8中一個很牛逼的新特性就是方法引用和構造器引用,爲什麼說它很牛逼呢?往下看!

方法引用

當要傳遞給Lambda體的操作,已經有實現的方法了,可以使用方法引用!這裏需要注意的是:實現抽象方法的參數列表,必須與方法引用方法的參數列表保持一致!

那麼什麼是方法引用呢?方法引用就是操作符“::”將方法名和對象或類的名字分隔開來。

有如下三種使用情況:

  • 對象::實例方法

  • 類::靜態方法

  • 類::實例方法

這裏,我們可以列舉幾個示例。

例如:

(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")

注意: 當需要引用方法的第一個參數是調用對象,並且第二個參數是需要引用方法的第二個參數(或無參數)時: ClassName::methodName 。

構造器引用

格式如下所示:

ClassName::new

與函數式接口相結合,自動與函數式接口中方法兼容。可以把構造器引用賦值給定義的方法,與構造器參數列表要與接口中抽象方法的參數列表一致!

例如:

Function<Integer, MyClass> fun = (n) -> new MyClass(n);

等同於

Function<Integer, MyClass> fun = MyClass::new;

數組引用

格式如下所示。

type[]::new

例如:

Function<Integer, Integer[]> fun = (n) -> new Integer[n];

等同於

Function<Integer, Integer[]> fun = Integer[]::new;

寫在最後

如果覺得文章對你有點幫助,請微信搜索並關注「 冰河技術 」微信公衆號,跟冰河學習Java8新特性。

最後,附上Java8新特性核心知識圖,祝大家在學習Java8新特性時少走彎路。
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章