一、给自定义注解加注解
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface MyAnnotation {}
解释:
@Retention 指示注释类型要保留多久,如果注释类型声明中不存在Retention 注释,则保留策略默认为RetentionPolicy.CLASS
RetentionPolicy有三个值 CLASS : 编译器将注释记录在类文件中,但在运行时vm不需要保留注释 ;RUNTIME: 编译器将把注释记录在类文件中,在运行时vm将保留注释,因此可以反射性读取;SOUCE:编译器丢弃的注释。
@Target : 指示注释类型所适用的程序元素的种类。如果注释类型声明中不存在Target 元注释(注释 注释类型的 注释),则声明的类型可以在任意一程序元素上,如果存在这样的元注释,则编译器强制实施指定的使用限制
二、给自定义注解加属性
注解属性的类型
l 基本数据类型、字符串、Class、注解类型、枚举,还有以上类型的数据
三、自定义注解案例
三种基本的注解需要掌握
@SuppressWarnings//取消显示指定的编译器警
@Retention(RetentionPolicy.RUNTIME)//注解保留的时间
@Target({ElementType.TYPE,ElementType.METHOD})//注解使用范围(class method)
----------------------------------------
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE,ElementType.METHOD})//代表 该注解使用的范围(class method)
public @interface MyAnnotation {
String color() default "blue";
String value();
String []strArr();
MyAnnotation1 myanno() default @MyAnnotation1("aa");
}
///下面是如何调用
//通过 反射 判断并得到自定义的注解
if(AnnotationTest.class.isAnnotationPresent(MyAnnotation.class)){//判断是否有 对应的注解
MyAnnotation anno = AnnotationTest.class.getAnnotation(MyAnnotation.class);
System.out.println(anno.color());
System.out.println(anno.value());
System.out.println(anno.strArr().length);
System.out.println(anno.myanno().value());
}