JDK8新特性:函數式接口@FunctionalInterface的使用說明

我們常用的一些接口Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface註解。




通過JDK8源碼javadoc,可以知道這個註解有以下特點:

1、該註解只能標記在”有且僅有一個抽象方法”的接口上。

2、JDK8接口中的靜態方法和默認方法,都不算是抽象方法。

3、接口默認繼承java.lang.Object,所以如果接口顯示聲明覆蓋了Object中方法,那麼也不算抽象方法。

4、該註解不是必須的,如果一個接口符合”函數式接口”定義,那麼加不加該註解都沒有影響。加上該註解能夠更好地讓編譯器進行檢查。如果編寫的不是函數式接口,但是加上了@FunctionInterface,那麼編譯器會報錯。


@FunctionalInterface標記在接口上,“函數式接口”是指僅僅只包含一個抽象方法的接口



如果一個接口中包含不止一個抽象方法,那麼不能使用@FunctionalInterface,編譯會報錯。



比如下面這個接口就是一個正確的函數式接口:



// 正確的函數式接口
@FunctionalInterface
public interface TestInterface {


    // 抽象方法
    public void sub();

    // java.lang.Object中的方法不是抽象方法
    public boolean equals(Object var1);

    // default不是抽象方法
    public default void defaultMethod(){

    }

    // static不是抽象方法
    public static void staticMethod(){

    }
}

函數式接口的主要作用

使用@FunctionalInterface可以防止以後在接口中添加新的抽象方法簽名。就是限定了只能用此抽象方法,別的方法不能用。直接限制死。

主要用於編譯級錯誤檢查,加上該註解,當你寫的接口不符合函數式接口定義的時候,編譯器會報錯。加不加@FunctionalInterface對於接口是不是函數式接口沒有影響,該註解只是提醒編譯器去檢查該接口是否僅包含一個抽象方法。

發佈了65 篇原創文章 · 獲贊 67 · 訪問量 16萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章