注解Annotation

  注解相当于一种标记,加了注解就等于打上了某种标记,没加,则等于没有某种标记,以后,javac编译器,开发工具和其他程序可以用反射来了解你的类及各种元素上有无何种标记,看你有什么标记,就去干相应的事,标记可以加在包,类,字段,方法,方法的参数以局部变量上。
        图片
    定义一个最简单的注解:public @interface MyAnnotation{ }
    把它加在某个类上:@MyAnnotation public class AnnotationTest{ }
    用反射进行测试AnnotationTest的定义上是否有@MyAnnotation
    @Retention元注解的讲解,其三种取值:
        RetetionPolicy.SOURCE     java源文件
        RetetionPolicy.CLASS        class文件    
        RetetionPolicy.RUNTIME    内存中的字节码
    @Target
       

 @Deprecated 
             @Retention ( value = RUNTIME )   //值的生命周期
             @Target ( value ={ CONSTRUCTOR , FIELD , LOCAL_VARIABLE , METHOD , PACKAGE , PARAMETER , TYPE })    //适用范围
@Override  
             @Retention ( value = SOURCE
             
@Target ( value = METHOD )
@SuppressWarnings  
             @Retention ( value = SOURCE )
              @Target ( value ={ TYPE , FIELD , METHOD , PARAMETER , CONSTRUCTOR , LOCAL_VARIABLE })

为注解增加基本属性
    A.定义基本类型的属性和应用属性
        在注解类中增加
        String color();  //可以设置默认String color() default "yellow";
        String value();    
//可以设置默认String value() default "abc ";
        数组类型int [ ] arrayAttr(); //
//可以设置默认  int [ ] arrayAttr()  default{1,2,3} ;
        
枚举类型 EnumTest.TrafficLamp lamp();
        注解类型MetaAnnotation annotationAttr(); // 可以设置默认  @ MetaAnnotation  ("xxxx") ;
         使用:@MyAnnotation(color="red")   
                    @
MyAnnotation (value="abc")
                    @MyAnnotation(arrayAttr={2,3,4})
                    @MyAnnotation(lamp=EnumTest.TrafficLamp.GREEN)
                    @MyAnnotation(annotationAttr=@MetaAnnotation("yyy"))  
             可以认为@
MyAnnotation是 MyAnnotation类的实例对象,同样可认为 @MetaAnnotation MetaAnnotation类的一个实例对象

用反射方式获取得注解对应的实例对象后,再能过该对象调用属性对应的方法
        
MyAnnotation annotation=(MyAnnotation)AnnotationTest.class.getAnnotation(MyAnnotation.class);

代码:
   @interface MetaAnnotation {
String value();
        }


        @Retention(RetentionPolicy.RUNTIME)
        @Target({ElementType.METHOD,ElementType.TYPE})
 @interface ItcastAnnotation {
String color();//注解添加属性
String value();
int[] arrayAttr();
//EnumTest.TrafficLamp lamp() default EnumTest.TrafficLamp.RED;
MetaAnnotation annotationAttr()default@MetaAnnotation("kkk");
    }  


@ItcastAnnotation(color="red",value="abc",arrayAttr={1,2},annotationAttr=@MetaAnnotation("flx"))
public class AnnotationTest {

@SuppressWarnings("deprecaion")
//@ItcastAnnotation("abc")只有一个值时,可简写
public static void main(String[] args) throws Exception{
// TODO Auto-generated method stub
System.runFinalizersOnExit(true);
//sayHello();
if(AnnotationTest.class.isAnnotationPresent(ItcastAnnotation.class))
{
ItcastAnnotation annotation=(ItcastAnnotation)AnnotationTest.class.getAnnotation(ItcastAnnotation.class);
System.out.println(annotation.color());
System.out.println(annotation.value());
System.out.println(annotation.arrayAttr().length);
//System.out.println(annotation.lamp().nextLamp().name());
System.out.println(annotation.annotationAttr().value());
}
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值