A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

© 血马雄风 中级黑马   /  2015-8-27 10:09  /  186 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文


注解的属性名与获取属性的方法名完全一样。
注解的属性的类型只能:基本类型、String、Class、枚举、注解,或这些类型的数组

@Retention(value = RUNTIME)
@Target(value=TYPE)
public @interface SourceAnnotation{
    String value() default "SourceAnnotation";
}


@Retention(value = RUNTIME)
@Target(value = {TYPE,METHOD})
public @interface MyAnnotation{
    //属性,有点怪
    String value();                       //字符串
    String color() default "blue";
    int[] arrayAttr() defalut {1, 2, 3}; //数组
    enum EnumLamp{RED, GRREN, YELLOW} lamp() default EnumLamp.RED;  //枚举 不会错把
    @SourceAnnotation sourceAnnotation() default @SourceAnnotation(value = MyAnnotation);
}


@MyAnnotation(sourceAnnotation=@SourceAnnotation("yang"), color="red", arrayAttr={1,2,3})
public class UseAnnotation{
   
    public void getAnnotationAttribute(){

        //MyAnnotation myAnnotation = new MyAnnotation(); //?

        if(Annotation.class.isAnnotationPresent(MyAnnotation.class)){
            MyAnnotation myAnnotation = (MyAnnotation)MyAnnotation.class.newInstance();
            System.out.println(myAnnotation.value());
            System.out.println(myAnnotation.color());
            System.out.println(myAnnotation.arrayAttr().length);
            System.out.println(myAnnotation.lamp());
            System.out.println(myAnnotation.sourceAnnotation());
        }  
    }  
}



0 个回复

您需要登录后才可以回帖 登录 | 加入黑马