@FunctionalInterface註解和函數式接口

函數式接口

當然首先是一個接口,然後就是在這個接口裏面只能有一個抽象方法。
這種類型的接口也稱爲SAM接口,即Single Abstract Method interfaces。

如下:

@FunctionalInterface
public interface Runnable {
    public abstract void run();
}

@FunctionalInterface註解Java 8爲函數式接口引入了一個新註解@FunctionalInterface,主要用於編譯級錯誤檢查,加上該註解,當你寫的接口不符合函數式接口定義的時候,編譯器會報錯

Tips:加不加@FunctionalInterface對於接口是不是函數式接口沒有影響,該註解知識提醒編譯器去檢查該接口是否僅包含一個抽象方法

函數型接口只有一個抽象方法的接口,但是函數型接口可以包含以下方法

默認方法

函數式接口裏是可以包含默認方法,因爲默認方法不是抽象方法,其有一個默認實現,所以是符合函數式接口的定義的;

靜態方法

函數式接口裏是可以包含靜態方法,因爲靜態方法不能是抽象方法,是一個已經實現了的方法,所以是符合函數式接口的定義的;

如下代碼不會報錯:

Object裏的public方法

函數式接口裏是可以包含Object裏的public方法,這些方法對於函數式接口來說,不被當成是抽象方法(雖然它們是抽象方法);因爲任何一個函數式接口的實現,默認都繼承了Object類,包含了來自java.lang.Object裏對這些抽象方法的實現;

如下代碼不會報錯:

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