有且只有一個抽象方法的接口。函數式接口適用於函數式編程,在java函數式編程的體現就是
Lambda:()->{}
特點:
延遲加載(解釋:滿足條件執行,不滿足條件不執行,避免性能浪費)
定義格式:
修飾符 interface 接口名稱{
Public abstract 返回值類型 方法名稱(可選參數信息);
}
@FunctionalInterface註解的作用:
用來檢測函數式接口是否正確,因爲函數式接口只能有一個抽象方法,爲了避免就用檢測註解,成功後進行編譯!
Lambda優化案例-代碼詳解(於普通拼接字符對比)
packagecn.itcast.Lambda;
publicclassDemo01Logger{
/*消耗內存的傳遞內容,if語句相同
publicstaticvoidshowLog(intlevel,Stringmessage){傳遞int類型的等級,日誌信息
if(level==1){
System.out.println(mb.builderMessage());
}
*/
//使用函數式編程必須存在函數式接口
publicstaticvoidshowLog(intlevel,MessageBuildermb){//傳遞int類型的等級,接口
if(level==1){
System.out.println(mb.builderMessage());
}
}
publicstaticvoidmain(String[]args){
Stringmsg1="Hellow";
Stringmsg2="World";
Stringmsg3="Java";
/*消耗內存的輸出,不管等級是否爲一,下面的字符串都會進行拼接
showLog(level:1,message:msg1+msg2+msg3);
*/
//如何等級不等於1,下面這段代碼就不是執行;Lambda表達式用()->{}表示
showLog(1,()->{
returnmsg1+msg2+msg3;
});
}
}
註解類代碼:
packagecn.itcast.Lambda;
@FunctionalInterface
publicinterfaceMessageBuilder{
publicabstractStringbuilderMessage();
}
函數式接口作爲方法的參數
函數式接口作爲方法的返回值類型