Java如何自定義注解


  本文主要是記錄所學,以供后續參考。注解是Java 1.5引入的,Java自定義注解是通過運行時靠反射獲取注解,注解相當於是一種嵌入在程序中的元數據,可以使用注解解析工具或編譯器對其進行解析,也可以指定注解在編譯期或運行期有效。在注解誕生之前,程序的元數據存在的形式僅限於java注釋或javadoc,但注解可以提供更多功能,它不僅包含元數據,還能作用於運行期,注解解析器能夠使用注解決定處理流程。

  一、創建自定義注解

  創建自定義注解與編寫接口很相似,只是在接口關鍵字前面添加@符合。

import java.lang.annotation.ElementType;
import
java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(ElementType.METHOD) // 只對方法有效 @Retention(RetentionPolicy.RUNTIME) // 運行時有效 public @interface PersonInfo { String name() default ""; String id() default "";
}

 在PersonInfo注解中定義了兩個name和id兩個方法。注解方法不能有參數,但可以有默認值;返回的類型局限於原始類型、字符串、枚舉、注解或以上類型構成的數值。

在注解中可以包含與其綁定的元注解,元注解為注解提供信息,有四種元注解類型,如下說明:

  1. @Documented – 表示使用該注解的元素應被javadoc或類似工具文檔化,它應用於類型聲明,類型聲明的注解會影響客戶端對注解元素的使用。如果一個類型聲明添加了Documented注解,那么它的注解會成為被注解元素的公共API的一部分。

  2. @Target – 用於描述修飾對象的范圍,范圍取值於ElementType這個枚舉類:TYPE(類、接口(包括注釋類型)或枚舉聲明)、METHOD((方法聲明)、 CONSTRUCTOR(構造方法聲明)、 FIELD(字段聲明)、ANNOTATION_TYPE(注釋類型聲明)、LOCAL_VARIABLE(局部變量聲明)、PACKAGE(包聲明)、PARAMETER(參數聲明)。如果Target元注解不存在,那么該注解就可以使用在任何程序元素之上。

  3. @Inherited – 表示一個注解類型會被自動繼承,如果用戶在類聲明的時候查詢注解類型,同時類聲明中也沒有這個類型的注解,那么注解類型會自動查詢該類的父類,這個過程將會不停地重復,直到該類型的注解被找到為止,或是到達類結構的頂層(Object)。

  4. @Retention – 表示注解類型保留時間的長短,范圍取值於RetentionPolicy這個枚舉類:

  (1)CLASS 編譯器將把注釋記錄在類文件中,但在運行時 VM 不需要保留注釋

  (2)RUNTIME  編譯器將把注釋記錄在類文件中,在運行時 VM 將保留注釋,因此可以反射性地讀取

  (3)SOURCE 編譯器要丟棄的注釋

  二、使用自定義注解
  注解保持性策略應該是RUNTIME,否則它的信息在運行期無效,我們也不能從中獲取任何數據。
  


------20191224閃


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM