註解
使用@interface自訂註解時,自動繼承了java.lang.annotation.Annotation介面,由編譯器自動完成其他細節。在定義註解時,不能繼承其他的註解或介面。@interface用來聲明一個註解,其中的每一個方法實際上是聲明了一個配置參數。方法的名稱就是參數的名稱,傳回值類型就是參數的類型(傳回值類型只能是基本類型、Class、String、enum)。可以通過default來聲明參數的預設值。
定義註解格式:
public @interface 註解名 {定義體}
註解參數的可支援資料類型:
1.所有基礎資料型別 (Elementary Data Type)(int,float,boolean,byte,double,char,long,short)
2.String類型
3.Class類型
4.enum類型
5.Annotation類型
6.以上所有類型的數組
直接上代碼:
import java.lang.annotation.Documented;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) // 保留時間,一般註解就是為了架構開發時代替設定檔使用,JVM運行時用反射取參數處理,所以一般都為RUNTIME類型@Documented // 用於描述其它類型的annotation應該被作為被標註的程式成員的公用API,因此可以被例如javadoc此類的工具文檔化public @interface OneAnnotation { // 定義註解的參數,類型可以為基本類型以及String、Class、enum、數組等,default為預設值String parameter1() default "";int parameter2() default -1;
使用註解的類
/** * 一個用到了自訂的註解的類 */public class OneClass {@OneAnnotation(parameter1="YES", parameter2=10000)public void oneMethod () {}
提取註解參數
import java.lang.reflect.Method; public class TestThis { public static void main(String[] args) throws Exception {// 提取到被註解的方法Method,這裡用到了反射的知識Method method = Class.forName("OneClass").getDeclaredMethod("oneMethod");// 從Method方法中通過方法getAnnotation獲得我們設定的註解OneAnnotation oneAnnotation = method.getAnnotation(OneAnnotation.class);// 得到註解的倆參數System.out.println(oneAnnotation.parameter1());System.out.println(oneAnnotation.parameter2());}
測試結果:
YES
10000
相關文章:
Java自訂註解
Java註解教程及自訂註解
相關視頻:
全面解析Java註解