Java高級(jí)特性01-怎么使用自定義注解
自定義注解是Java高階語(yǔ)言特性,在各種三方框架中經(jīng)常能見到它們的身影。自定義注解能夠使你編寫高可維護(hù)性、更具靈活性的代碼。在這篇博文中,我們將探索Java的自定義注解世界,并學(xué)習(xí)如何有效地利用它們
1.什么是自定義注解
注解Annotation是以元數(shù)據(jù)的形式在Java5中引入,它添加到Java代碼里,如Java類(class)、方法、屬性甚至是其他注解。它們給代碼提供了額外的信息,在三方框架和庫(kù)用于生成代碼、執(zhí)行驗(yàn)證或在運(yùn)行時(shí)應(yīng)用某些行為時(shí)進(jìn)行使用。自定義注解顧名思義,是你自己定義的注解。它們?cè)试S你根據(jù)自己的需求,擴(kuò)展Java現(xiàn)有的注解集合。
2.Java自帶注解
Java常見的一些注解有,@Override:用于檢查方法是否是重寫父類的方法。@FunctionalInterface:用于檢查接口是否是函數(shù)式接口。@Deprecated:用于標(biāo)注方法已經(jīng)過時(shí),不推薦使用。除了這些注解還有其他注解,
3.什么是元注解
用于其他注解的注解稱為元注解。在java.lang.annotation中定義了幾種元注解類型。
@Retention
@Documented
@Target
@Inherited
@Repeatable
3.1@Retention注解
RetentionPolicy.SOURCE:注解只保留在源碼中,編譯器會(huì)丟棄掉
RetentionPolicy.CLASS:注解將保留在.class文件里,但在運(yùn)行時(shí)不會(huì)保留
RetentionPolicy.RUNTIME:注解將保留在.class文件中,并且jvm會(huì)保留,可以通過反射讀取
如果注解類型聲明中不存在Retention注解,則Retention默認(rèn)為 RetentionPolicy.CLASS。
3.2 @Documented注解
帶有該類型的注解會(huì)被javadoc和其他類似工具進(jìn)行文檔化。
3.3 @Target注解
此注解用來進(jìn)行限定可以使用該注解的Java元素類型,它有以下幾種類型
ElementType.TYPE:允許被修飾的注解作用在類、接口(包括注解類型)和枚舉上
ElementType.FIELD:允許作用在屬性字段上(包括枚舉常量)
ElementType.METHOD:允許作用在方法上
ElementType.PARAMETER:允許作用在方法參數(shù)上
ElementType.CONSTRUCTOR:允許作用在構(gòu)造器上
ElementType.LOCAL_VARIABLE:允許作用在本地局部變量上
ElementType.ANNOTATION_TYPE:允許作用在注解上
ElementType.PACKAGE:允許作用在包上
ElementType.TYPE_PARAMETER 應(yīng)用于類型變量的聲明語(yǔ)句前。
ElementType.TYPE_USE 應(yīng)用于所有使用類型的任何語(yǔ)句(如:泛型,類型轉(zhuǎn)換等)
3.4 @Inherited注解
如果一個(gè)類用上了@Inherited修飾的注解,那么其子類也會(huì)繼承這個(gè)注解
接口用上個(gè)@Inherited修飾的注解,其實(shí)現(xiàn)類不會(huì)繼承這個(gè)注解
父類的方法用了@Inherited修飾的注解,子類也不會(huì)繼承這個(gè)注解
3.5 @Repeatable注解
Java8 之前禁止對(duì)同樣的注解類型聲明多次,用這個(gè)元注解表示申明的注解是可以重復(fù)的,舉個(gè)例子

4.如何定義一個(gè)自定義注解

如上面的代碼TaskCondition就是一個(gè)自定義注解,自定義注解是@interface關(guān)鍵詞開頭。加上元注解進(jìn)行搭配
5.如何獲取自己定義的注解
從字段上獲取自定義注解:

從方法上讀取注解
