3/12/2014
3:48:00 PM 0

Java 8 Functional Interface

Java 8 新增了 lambda expression 的新概念, 如果要將 method 當作參數傳遞, 就要先定義所需的函式介面(Functional Interface)

什麼是函式介面呢? 簡而言之就是 interface 中, 只定義了一個可被 implement 的抽象 method

Java 內建的函式介面有很多,像是 java.lang.Runnable, java.util.concurrent.Callable, java.util.Comparator,這些 interface 的共同點就是只定義了一個抽象 method, 因為只定義了一個抽象 method, 當在程式中使用 lamdba expression 時, 編譯器自然知道是 implement interface 中的哪個 method

Java8 新增了一個 annotation : @FunctionalInterface, 如果在一個不是 functional interface 的 interface 用這個 annotation, compiler 就會顯示警告,使用方法如下
@FunctionalInterface
public interface TestFunctionalInterface {
    void test1();
}
若加入 void test2(); 則會發生錯誤

Java 8 的 API 文件上說明了建立 functional interface 的原則 => "a functional interface has exactly one abstract method"
只要符合上述原則,下面的例子使用了 default method 仍然是一個有效的 functional interface
@FunctionalInterface
public interface SubFunctionalInterface extends TestFunctionalInterface {
    default public void test2() {
        System.out.println("test2");
    }
}
Java 8 定義了許多通用函式介面, 置放於 java.util.function package 中, 開發者可視狀況需求使用所需的 interface

0 comments:

Post a Comment