被@FunctionalInterface註解標記的類型代表這是一個函數接口。從概念上講,函數接口只有一個抽象方法。若是接口聲明的抽象方法覆寫Object類的公共方法,那這方法不算做接口的抽象方法,由於接口具備Object方法的默認實現。html
先看Java SE 8中@FunctionalInterface註解是如何聲明的:java
package java.lang; import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FunctionalInterface {}
由Java源代碼聲明咱們瞭解到:@FunctionalInterface註解,只能用於類。其實,它的應用範圍更小,只能應用於接口類型。spring
咱們可使用lambda表達式,方法引用或構造函數引用建立功能接口的實例。函數
若是一個類型被此標記的話,若是不是如下狀況,編譯器會報錯:spa
可是,不管接口聲明中是否標記了@FunctionalInterface註解,編譯器都會將知足函數接口定義的任何接口視爲函數接口。code
像個人「函數接口(Functional Interfaces)」這篇博文中聲明的函數接口,均可以使用此註解進行顯式標記,告訴用戶此接口是函數接口。htm
下節將給你們講解最後一個Java SE預約義註解@Deprecated的使用blog