要深入學習註解,我們就必須能定義自己的註解,並使用註解,在定義自己的註解之前,我們就必須要瞭解Java為我們提供的元註解和相關定義註解的語法。 ...
要深入學習註解,我們就必須能定義自己的註解,並使用註解,在定義自己的註解之前,我們就必須要瞭解Java為我們提供的元註解和相關定義註解的語法。
1 package annotation; 2 3 import static java.lang.annotation.ElementType.METHOD; 4 import static java.lang.annotation.RetentionPolicy.RUNTIME; 5 6 import java.lang.annotation.Documented; 7 import java.lang.annotation.ElementType; 8 import java.lang.annotation.Retention; 9 import java.lang.annotation.RetentionPolicy; 10 import java.lang.annotation.Target; 11 /** 12 * 13 * @author Minzhe Xu 2017年4月27日下午3:22:52 14 * 15 *@Target 表示該註解用於什麼地方,可能的值在枚舉類 ElemenetType 中,包括: 16 *ElemenetType.CONSTRUCTOR:構造器聲明 17 *ElemenetType.FIELD :域聲明(包括 enum 實例) 18 *ElemenetType.LOCAL_VARIABLE:局部變數聲明 19 *ElemenetType.METHOD :方法聲明 20 *ElemenetType.PACKAGE :包聲明 21 *ElemenetType.PARAMETER :參數聲明 22 *ElemenetType.TYPE:類,介面(包括註解類型)或enum聲明 23 * 24 *@Retention 表示在什麼級別保存該註解信息。可選的參數值在枚舉類型 RetentionPolicy 中,包括: 25 *RetentionPolicy.SOURCE :註解將被編譯器丟棄 26 *RetentionPolicy.CLASS :註解在class文件中可用,但會被VM丟棄 27 *RetentionPolicy.RUNTIME VM:將在運行期也保留註釋,因此可以通過反射機制讀取註解的信息。 28 * 29 *@Documented 將此註解包含在 javadoc 中 ,它代表著此註解會被javadoc工具提取成文檔。在doc文檔中的內容會因為此註解的信息內容不同而不同。相當與@see,@param 等。 30 * 31 *@Inherited 允許子類繼承父類中的註解。 32 */ 33 34 @Target({ElementType.TYPE,ElementType.CONSTRUCTOR,ElementType.METHOD,ElementType.PARAMETER,ElementType.FIELD}) 35 @Retention(RetentionPolicy.RUNTIME) 36 public @interface TestA { 37 38 /** 39 * @interface用來聲明一個註解, 40 * 其中的每一個方法實際上是聲明瞭一個配置參數。 41 * 方法的名稱就是參數的名稱,返回值類型就是參數的類型(返回值類型只能是基本類型、Class、String、enum)。 42 * 可以通過default來聲明參數的預設值。 43 */ 44 String name(); 45 int id() default 0; 46 Class gid(); 47 48 }