Java @FunctionInterface函式式介面使用說明

風來了,雨停了發表於2020-10-20

概述

@FunctionInterface 稱為函式式介面,屬於JDK8新增的特性。常見的一些介面比如Runnable、Callable都新增了該註解。

使用要求

  • 標記在介面 Interface 上
  • 必須包含一個並且只能有一個抽象方法
  • static方法和default方法,都不算抽象方法
  • 介面預設繼承Object,顯示實現

例子

先看一個錯誤示例:

@FunctionalInterface
public interface MyInterface {
    //第一個抽象方法
    void test(int a, int b);

    //第二個抽象方法
    void test2(int a, int b);
}

編譯報錯:
在這裡插入圖片描述
再來看看正確示例:

@FunctionalInterface
public interface MyInterface {

    //靜態方法,不佔用抽象方法的個數
    static void staticMethod(){
        System.out.println("Statis Method");
    }

    //預設方法,不佔用抽象方法的個數
    default void defaultMethod(){
        System.out.println("Default Method");
    }

	//Object方法,不佔用抽象方法的個數
    int hashCode();

    //唯一一個抽象方法
    void test(int a, int b);    
}

@FunctionInterface註解的介面,允許使用Lambda表示式例項化

方式一,構造物件:

public static void main(String[] args) {
    MyInterface myInterface = (a, b) -> {
        System.out.println("Test Method ====> " + a + "," + b);
    };
    myInterface.test(10, 15);
}

方式二,作為函式引數傳遞:

public static void main(String[] args) {
    test((a, b) -> {
        System.out.println("Test Method ====> " + a + "," + b);
    }, 5, 10);
}

public static void test(MyInterface myInterface, int a, int b){
    myInterface.test(a, b);
}

相關文章