1 注解的应用(jdk1.5的新特性)
一个注解相当于一个特殊的类
例子: @SuppressWarning("deprecation") @Deprecated @Override注解相当于一种标记,在程序中加了注解等于为程序打上了某种标记,编译器和工具类通过反射来了解你的类及某种元素
上有无何种标记,有标记就去干相应的事 标记可以加在包,类,字段,方法,方法的参数以及局部变量上2 注解的定义与反射调用
注解类
@interface A{}应用了“注解类”的类
@A class B{}对“应用了注解类的类”进行反射操作的类
class C{ B.class.isAnnotionPresent(A.class); A a = B.class.getAnnotion(A.class) }例子如下:
//元注解 @Retention(RetentionPolicy.RUNTIME) public @interface itcastAnnotation{} @itcastAnnotation public class AnnotationTest{ if(AnnotationTest.class.isAnnotionPresent(itcastAnnotation.class)){ itcastAnnotation annotaion =(itcastAnnotation)AnnotationTest.class.getAnnotion(itcastAnnotation.class); } }
Annotation保留生命周期
1、RetentionPolicy.SOURCE (编译器查看) 2、RetentionPolicy.CLASSS (默认) 3、RetentionPolicy.RUNTIME (运行时阶段,检查二进制代码)@Target(ElementType.METHOD,ElementType.TYPE)
注解的应用范围
3 为注解增加各种属性
@Retention(RetentionPolicy.RUNTIME) public @interface itcastAnnotation{ String color() default "bule"; String value(); //只有一个属性,则可以省略属性名称 int[] arrayAttr() default {1,2,3}; EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED; MetaAnnotation annotationAttr() default @MetaAnnotation("lhm"); } @itcastAnnotation(annotationAttr=@MetaAnnotation("fix"),color="red",arrayAttr={3,4,5}) @itcastAnnotation("xyz") public class AnnotationTest{ if(AnnotationTest.class.isAnnotionPresent(itcastAnnotation.class)){ itcastAnnotation annotaion =(itcastAnnotation)AnnotationTest.class.getAnnotion(itcastAnnotation.class); annotaion.color//red annotation.annotationAttr().value();//fix } } public @interface MetaAnnotation { String value(); }