Java 方法引用的介紹

(1)成員方法的介紹 

public class Demo {
    public static void printString(Printable p){
        p.print("aaa");
    }

    public static void main(String[] args) {
        //用於printString方法中傳遞的參數是一個函數式接口,所以可以使用Lambda表達式對參數進行傳遞
        printString(s->System.out.println(s));


        /*
        * 分析:
        * 在本案例中,Lambda表達式的目的就是傳遞需要打印的字符串
        * 把參數s,傳遞給了System.out對象,調用該對象中的方法println方法對參數進行輸出
        * 注意;
        * (1)System.out對象已經存在
        * (2)println方法也已經存在
        * 所以我們可以使用方法引用來優化Lambda表達式
        * 可以使用System.out對象來直接引用out方法
        * */


        //使用方法引用來優化上述Lambda表達式
        printString(System.out::println);


        /*
        * 上式中,雙冒號【::】爲引用運算符,它所在的表達式爲方法引用,如果Lambda表達式想要表達的函數方案已經存在於某個方法的實現中,那麼可以通過雙冒號來引用該方法,作爲Lambda的替代則
        * 上式之前的Lambda表達式中,所重寫的接口中的抽象方法的實現代碼,在System.out對象中已經存在,即println方法,因此Lambda表達式完全可以由方法引用所替代,
        * 對比如下:
        * Lambda表達式:s->System.out.println(s);含義:拿到參數後,經過Lambda表達式將參數傳遞給接口的實現類進行處理,即使用System.out.println(s)進行打印
        } 方法引用的表達式:System.out::println 含義:直接用System.out對象中的println方法來替代Lambda表達式,實質上是複用其它類中現有的方法,避免了自己重寫
        *
        * 注:Lambd表達式中傳遞的參數一定是方法引用中,被引用的方法可以接收的參數類型,否則會報錯
        * */
    }

}

(2)函數式接口


@FunctionalInterface
public interface Printable {
    public abstract void print(String s);
}

 

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