網頁

2020/6/19

Java Functional Interface是什麼?

「A functional interface has exactly one abstract method」,也就是「Functional Interface是只有一個抽象方法的Interface」。

例如Java的ComparatorRunnable都是Functional Interface。

而Java 8多了@FunctionalInterface用來標明屬於Functional Interface的介面。

設計Functional Interface目的是為了搭配Lambda語法使用。

自訂一個Functional Interface如下

@FunctionalInterface
public interface DemoFunctionalInterface {

    void onlyOneAbstractMethod();

}

不過你若是看過原始碼可能覺得奇怪,Comparator中明明除了compare()外,還有另一個抽象方法equals(),兩個抽象方法不就違反上述Functional Interface只有能一個抽象方法的規則嗎?那是因為若宣告的抽象方法是覆寫java.lang.Object的公開方法,例如Object.equals(),則這類的抽象方法並不算在這個介面上,因為Object本身已經實作了此方法了。因此Comparator中只有一個compare()抽象方法,也符合Funcitional Interface的定義。

節錄Functional Interface的API說明如下

...If an interface declares an abstract method overriding one of the public methods of java.lang.Object, that also does not count toward the interface's abstract method count since any implementation of the interface will have an implementation from java.lang.Object or elsewhere.


沒有留言:

張貼留言