Java 中的函數式接口


概念

函數式接口在Java中是指:有且僅有一個抽象方法的接口。

函數式接口,即適用於函數式編程場景的接口。而Java中的函數式編程體現就是Lambda,所以函數式接口就是可

以適用於Lambda使用的接口。只有確保接口中有且僅有一個抽象方法,Java中的Lambda才能順利地進行推導。

備注:“語法糖”是指使用更加方便,但是原理不變的代碼語法。例如在遍歷集合時使用的for-each語法,其實 底層的實現原理仍然是迭代器,這便是“語法糖”。從應用層面來講,Java中的Lambda可以被當做是匿名內部 類的“語法糖”,但是二者在原理上是不同的。

格式

只要確保接口中有且僅有一個抽象方法即可:

修飾符 interface 接口名稱 {
    public abstract 返回值類型 方法名稱(可選參數信息);
    // 其他非抽象方法內容
    ......
}

由於接口當中抽象方法的 public abstract 是可以省略的,所以定義一個函數式接口很簡單:

修飾符 interface 接口名稱 {
    返回值類型 方法名稱(可選參數信息);
}

@FunctionalInterface注解

與 @Override 注解的作用類似,Java 8中專門為函數式接口引入了一個新的注解: @FunctionalInterface 。該注

解可用於一個接口的定義上:

@FunctionalInterface
public interface MyFunctionalInterface {
    void method();
}

一旦使用該注解來定義接口,編譯器將會強制檢查該接口是否確實有且僅有一個抽象方法,否則將會報錯。需要注意的是,即使不使用該注解,只要滿足函數式接口的定義,這仍然是一個函數式接口,使用起來都一樣。

自定義函數式接口

@FunctionalInterface
public interface MyFunctionalInterface {
    /**
     * 接口中唯一的抽象方法
     */
    public abstract void myMethod();
}
public class DemoFunctionalInterface {
    public static void main(String[] args) {
        method(
                () -> System.out.println("Lambda 執行啦!!!")
        );
    }

    private static void method(MyFunctionalInterface fi) {
        // 調用函數式接口中的方法
        fi.myMethod();
    }
}

控制台輸出:

Lambda 執行啦!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM