(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);
}