在註解類中增長String color(); @MyAnnotation(color="red")
MyAnnotation a = (MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class); System.out.println(a.color()); 能夠認爲上面這個@MyAnnotation是MyAnnotaion類的一個實例對象
String color() default "yellow";
String value() default "zxx"; 若是註解中有一個名稱爲value的屬性,且你只想設置value屬性(即其餘屬性都採用默認值或者你只有一個value屬性),那麼能夠省略value=部分,例如:@MyAnnotation("lhm")。
int [] arrayAttr() default {1,2,3}; @MyAnnotation(arrayAttr={2,3,4}) 若是數組屬性中只有一個元素,這時候屬性值部分能夠省略大括
EnumTest.TrafficLamp lamp() ; @MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
MetaAnnotation annotationAttr() default @MetaAnnotation("xxxx"); @MyAnnotation(annotationAttr=@MetaAnnotation(「yyy」) ) 能夠認爲上面這個@MyAnnotation是MyAnnotaion類的一個實例對象,一樣的道理,能夠認爲上面這個@MetaAnnotation是MetaAnnotation類的一個實例對象,調用代碼以下: MetaAnnotation ma = myAnnotation.annotationAttr(); System.out.println(ma.value());
package staticimport.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import staticimport.enums.TrafficEnumTest; @Retention(RetentionPolicy.RUNTIME)//元註解 @Target({ElementType.TYPE,ElementType.METHOD}) public @interface LH { //字符串類型,帶默認值 String color() default "red"; //字符串類型 String value(); //整型數組類型,帶默認值 int[] arrayAttr() default {1,2,3}; //枚舉類型,帶默認值 TrafficEnumTest.TrafficLampEnum lamp() default TrafficEnumTest.TrafficLampEnum.YELLOW; //註解類型,帶默認值 MetaAnnotation annotation() default @MetaAnnotation("xyz"); //Class類型,帶默認值 Class<?> clazzAttr() default String.class; }
package staticimport.annotation; //只有一個value屬性值須要賦值,能夠省略value= //數組屬性值只有一個,能夠省略{} @LH(color = "yellow", value = "abc", arrayAttr = 5, annotation = @MetaAnnotation("xxx"), clazzAttr = AnnotationTest.class) @SuppressWarnings("deprecation") public class AnnotationTest { public static void main(String[] args) { System.runFinalizersOnExit(true); AnnotationTest.sayHello(); if (AnnotationTest.class.isAnnotationPresent(LH.class)) { LH lh = (LH) AnnotationTest.class.getAnnotation(LH.class); System.out.println(lh); System.out.println(lh.color()); System.out.println(lh.value()); System.out.println(lh.arrayAttr().length); System.out.println(lh.lamp().nextLamp()); System.out.println(lh.annotation().value()); System.out.println(lh.clazzAttr()); } } // 標註本方法已過期,提示用戶不要再使用!但不影響已經使用的! @Deprecated @LH("kkk") public static void sayHello() { System.out.println("Hello,LH!"); } }
package staticimport.annotation; public @interface MetaAnnotation { String value(); }
注:java
註解屬性類型能夠是8大基本數據類型、String、Class及其調用類型、枚舉、註解、基本數據類型數組數組