一、元注解(用于修饰注解)
-
@Retention
指定annotation指定标记注解的存储方式
值有:
* `RetentionPolicy.SOURCE` 标记的注释仅保留在源级别中,并由编译器忽略。
* `RetentionPolicy.CLASS` 标记的注释在编译时由编译器保留,但Java虚拟机`JVM`会忽略。
* `RetentionPolicy.RUNTIME` 标记的注释由`JVM`保留,因此运行时环境可以使用它。
-
@Documented
注释表明,无论何时使用指定的注释,都应使用Javadoc工具记录这些元素。(默认情况下,注释不包含在Javadoc) -
@Target
注释标记另一个注释,以限制可以应用注释的Java元素类型。目标注释指定以下元素类型之一作为其值
可选值有:
* `ElementType.TYPE` 可以应用于类的任何元素。
* `ElementType.FIELD` 可以应用于字段或属性。
* `ElementType.METHOD` 可以应用于方法级注释。
* `ElementType.PARAMETER` 可以应用于方法的参数。
* `ElementType.CONSTRUCTOR` 可以应用于构造函数。
* `ElementType.LOCAL_VARIABLE` 可以应用于局部变量。
* `ElementType.ANNOTATION_TYPE` 可以应用于注释类型。
* `ElementType.PACKAGE` 可以应用于包声明。
* `ElementType.TYPE_PARAMETER`
* `ElementType.TYPE_USE`
@Inherited
注释表明注释类型可以从超类继承。当用户查询注释类型并且该类没有此类型的注释时,将查询类的超类以获取注释类型(默认情况下不是这样)。此注释仅适用于类声明。@Repeatable
Java SE 8中引入的,@Repeatable
注释表明标记的注释可以多次应用于相同的声明或类型使用(即可以重复在同一个类、方法、属性等上使用)。
自定义注解
例子
@Documented //javaDoc记录
@Retention(RetentionPolicy.RUNTIME) //运行环境可用
@Target({ElementType.TYPE}) //可用于任何元素
public @interface MyAnn {//自定义一个@Myann(value="")注解
String value() default "";
}
通过反射获取注解信息
- 判断是否应用的某个注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass)
- 获取指定类型的注解信息
public <A extends Annotation> A getAnnotation(Class<A> annotationClass)
- 获取所有注解的信息
public Annotation[] getAnnotations()