被@FunctionalInterface注解標記的類型表明這是一個函數接口。從概念上講,函數接口只有一個抽象方法。如果接口聲明的抽象方法覆寫Object類的公共方法,那這方法不算作接口的抽象方法,因為接口具有Object方法的默認實現。
先看Java SE 8中@FunctionalInterface注解是如何聲明的:
package java.lang; import java.lang.annotation.*; @Documented @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.TYPE) public @interface FunctionalInterface {}
由Java源代碼聲明我們了解到:@FunctionalInterface注解,只能用於類。其實,它的應用范圍更小,只能應用於接口類型。
我們可以使用lambda表達式,方法引用或構造函數引用創建功能接口的實例。
如果一個類型被此標記的話,如果不是以下情況,編譯器會報錯:
- 此類型是接口類型並且不是注解類型、枚舉或類
- 標記的類型滿足函數接口的要求
但是,無論接口聲明中是否標記了@FunctionalInterface注解,編譯器都會將滿足函數接口定義的任何接口視為函數接口。
像我的“函數接口(Functional Interfaces)”這篇博文中聲明的函數接口,都可以使用此注解進行顯式標記,告訴用戶此接口是函數接口。
下節繼續
下節將給大家講解最后一個Java SE預定義注解@Deprecated的使用