1. 程式人生 > >JDK8新特性:函式式介面@FunctionalInterface的使用說明

JDK8新特性:函式式介面@FunctionalInterface的使用說明

我們常用的一些介面Callable、Runnable、Comparator等在JDK8中都添加了@FunctionalInterface註解。



通過JDK8原始碼javadoc,可以知道這個註解有以下特點:

1、該註解只能標記在"有且僅有一個抽象方法"的介面上。

2、JDK8介面中的靜態方法和預設方法,都不算是抽象方法。

3、介面預設繼承java.lang.Object,所以如果介面顯示宣告覆蓋了Object中方法,那麼也不算抽象方法。

4、該註解不是必須的,如果一個介面符合"函式式介面"定義,那麼加不加該註解都沒有影響。加上該註解能夠更好地讓編譯器進行檢查。如果編寫的不是函式式介面,但是加上了@FunctionInterface,那麼編譯器會報錯。

@FunctionalInterface標記在介面上,“函式式介面”是指僅僅只包含一個抽象方法的介面


如果一個介面中包含不止一個抽象方法,那麼不能使用@FunctionalInterface,編譯會報錯。


比如下面這個介面就是一個正確的函式式介面:

  1. // 正確的函式式介面
  2. @FunctionalInterface
  3. publicinterface TestInterface {  
  4.     // 抽象方法
  5.     publicvoid sub();  
  6.     // java.lang.Object中的方法不是抽象方法
  7.     publicboolean equals(Object var1);  
  8.     // default不是抽象方法
  9.     publicdefaultvoid defaultMethod(){  
  10.     }  
  11.     // static不是抽象方法
  12.     publicstaticvoid staticMethod(){  
  13.     }  
  14. }