淺談函數(shù)式接口

函數(shù)式接口是 Java8 引入的一個(gè)新特性,是一種特殊的接口:SAM類型的接口(Single Abstract Method),但本質(zhì)上還是接口。相比較于其他接口,函數(shù)式接口有且只能有一個(gè)抽象方法。只要接口中出現(xiàn)多個(gè)抽象方法,那么就不能稱之為函數(shù)式接口,運(yùn)行的時(shí)候就會(huì)報(bào)錯(cuò)。為此 Java8 提供了一個(gè)新的注解@FunctionalInterface,如果接口被這個(gè)注解標(biāo)注,就說明該接口是函數(shù)式接口,如果有多于一個(gè)的抽象方法,在編譯的時(shí)候就會(huì)報(bào)錯(cuò)。但是這個(gè)注解不是必需的,只要接口符合函數(shù)式接口的定義,那么這個(gè)接口就是函數(shù)式接口。

原則上講,函數(shù)式接口中有且只能有一個(gè)抽象方法。但是在 Java8 之后接口中也是可以定義方法的:默認(rèn)方法和靜態(tài)方法,這兩種方法的定義并不會(huì)影響函數(shù)式接口的定義,可以隨意使用。即:

  • 接口中可以有一個(gè)或多個(gè)靜態(tài)方法,這不會(huì)影響到函數(shù)式接口的定義
  • 在 Java8 之后,接口允許定義由 default 修飾的默認(rèn)方法。這些方法也不會(huì)影響到函數(shù)式接口的定義
  • 可以有頂級(jí)父類Objectpublic 類型 的覆蓋方法。比如覆蓋父類中的:equals,toString,hashcode等方法
  • 函數(shù)式接口也支持繼承,可以繼承多個(gè)父接口,但是每個(gè)父接口只能有一個(gè)抽象方法,且必須是相同的抽象方法。

函數(shù)式接口的使用,使的我們可以將方法當(dāng)作參數(shù)來傳遞。在調(diào)用時(shí),lambda 表達(dá)式作為參數(shù)來使用。換句話說,當(dāng)一個(gè)方法的參數(shù)是 lambda 表達(dá)式時(shí),這個(gè)參數(shù)類型一定是函數(shù)式接口.

下面是一個(gè)函數(shù)接口的例子:

@FunctionalInterface
public interface LambdaTestasd {

    static void out(){
        System.out.println("這是一個(gè)函數(shù)式接口");
        System.out.println("這是接口里的靜態(tài)方法");
    }

    default void print(){
        System.out.println("這是接口里的默認(rèn)方法");
    }
    void test();
}

在 java8 中的 java.util.function包中,包含了幾大類函數(shù)式接口聲明:

核心函數(shù)式接口.png

使用樣例.png

其他的一些函數(shù)式接口:


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

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

  • 歡迎交流java8新特性系列文章:http://www.itdecent.cn/nb/27231419 . [...
    DoubleBin閱讀 12,317評(píng)論 0 51
  • 原文鏈接:https://github.com/EasyKotlin 值就是函數(shù),函數(shù)就是值。所有函數(shù)都消費(fèi)函數(shù),...
    JackChen1024閱讀 6,326評(píng)論 1 17
  • Java8 in action 沒有共享的可變數(shù)據(jù),將方法和函數(shù)即代碼傳遞給其他方法的能力就是我們平常所說的函數(shù)式...
    鐵牛很鐵閱讀 1,357評(píng)論 1 2
  • 注:之前關(guān)于Java8的認(rèn)知一直停留在知道有哪些修改和新的API上,對(duì)Lambda的認(rèn)識(shí)也是僅僅限于對(duì)匿名內(nèi)部類的...
    mualex閱讀 2,930評(píng)論 1 4
  • 前段時(shí)間一直在看lambda表達(dá)式,但是總感覺吃不透,在深入了解lambda表達(dá)式的時(shí)候,需要很多基礎(chǔ)的知識(shí)棧。這...
    西瓜真好吃丶閱讀 2,791評(píng)論 0 7

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