方法引用 ~ java8特性

1. 介紹

前面講的lambda表達(dá)式,已經(jīng)簡化了匿名類的寫法,而我們使用方法引用結(jié)合lambda表達(dá),可以更加簡化寫法,
可以看一下下面的示例:

List<Integer> values = Arrays.asList(1,2);
 //lambda表達(dá)式寫法
 values.forEach(v->System.out.println(v));
 //方法引用寫法
 values.forEach(System.out::println);

2. 方法引用的類型

  1. 靜態(tài)方法引用:類名::靜態(tài)方法,代表(參數(shù))->類名.靜態(tài)方法名(參數(shù))
  2. 構(gòu)造方法引用:類名::new, 代表(參數(shù))->new 類名(參數(shù))
  3. 實(shí)例方法引用:對象::實(shí)例方法 代表(實(shí)例變量,參數(shù))->實(shí)例變量.方法名(參數(shù))
  4. 類方法引用 : 類名::類方法 代表(參數(shù))->類名.方法名(參數(shù))
  5. 數(shù)組構(gòu)造引用:類名[]::new 代表(參數(shù))->new 類名[]

3. 實(shí)例

import java.util.Arrays;
import java.util.List;
import java.util.function.Supplier;

class MyClass {
    private int a;
    MyClass(){
        System.out.println("init...");
    }
    MyClass(int a){
        this.a = a;
    }
    public static void testStatic(MyClass c){
        System.out.println("static method");
    }
    public int test(){
        System.out.println("test method");
        return 1;
    }
    public void testObj(MyClass c){
        System.out.println("testObj method");
    }
}

public class MethodRefeTest {
    
    public static void main(String[] args) {
        //構(gòu)造方法引用
        Supplier<MyClass> c1 = MyClass::new;
        MyClass myClass = c1.get();
        List<MyClass> myClassList = Arrays.asList(myClass);
        //類方法引用
        myClassList.forEach(MyClass::test);
        //實(shí)例方法引用
        myClassList.forEach(myClass::testObj);
        //靜態(tài)方法引用
        myClassList.forEach(MyClass::testStatic);
    }
}

注意:上面的方法引用代表的函數(shù),需要和函數(shù)式接口的參數(shù)保持一致,不然編譯的時(shí)候就會有提示錯誤,
實(shí)際上可以看出,方法引用也就是lambda表達(dá)式的簡要書寫形式。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容