JAVA8新特性—函數(shù)式接口

函數(shù)式接口(Functional Interface)就是一個有且僅有一個抽象方法,但是可以有多個非抽象方法的接口。根據(jù)以前版本中的定義:接口中所有的方法必須是抽象方法,這里又來了一個非抽象方法,那這非抽象方法指的是什么方法呢?那就是默認(rèn)方法

定義了一個函數(shù)式接口如下:

@FunctionalInterface

interface GreetingService {?

?????void sayMessage(String message);

}

那么就可以使用Lambda表達(dá)式來表示該接口的一個實現(xiàn)(注:JAVA 8 之前一般是用匿名類實現(xiàn)的):

GreetingService greetService1 = message -> System.out.println("Hello " + message);

在我看來,函數(shù)式接口就是給lambda表達(dá)式私人訂制的,為了突出lambda的好用,然后來這么一個特性

java.util.function 它包含了很多類,用來支持 Java的 函數(shù)式編程。

Java 8為函數(shù)式接口引入了一個新注解@FunctionalInterface,主要用于編譯級錯誤檢查,加上該注解,當(dāng)你寫的接口不符合函數(shù)式接口定義的時候,編譯器會報錯。

提醒:加不加?@FunctionalInterface?對于接口是不是函數(shù)式接口沒有影響,該注解只是提醒編譯器去檢查該接口是否僅包含一個抽象方法

函數(shù)式接口里允許定義默認(rèn)方法

函數(shù)式接口里是可以包含默認(rèn)方法,因為默認(rèn)方法不是抽象方法,其有一個默認(rèn)實現(xiàn),所以是符合函數(shù)式接口的定義的;

函數(shù)式接口里允許定義靜態(tài)方法

函數(shù)式接口里是可以包含靜態(tài)方法,因為靜態(tài)方法不能是抽象方法,是一個已經(jīng)實現(xiàn)了的方法,所以是符合函數(shù)式接口的定義的;

函數(shù)式接口里允許定義 java.lang.Object 里的 public 方法

函數(shù)式接口里是可以包含Object里的public方法,這些方法對于函數(shù)式接口來說,不被當(dāng)成是抽象方法(雖然它們是抽象方法);因為任何一個函數(shù)式接口的實現(xiàn),默認(rèn)都繼承了 Object 類,包含了來自 java.lang.Object 里對這些抽象方法的實現(xiàn);

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

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

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