java自定义注解

一、元注解(用于修饰注解)

  1. @Retention指定annotation指定标记注解的存储方式
    值有:
* `RetentionPolicy.SOURCE` 标记的注释仅保留在源级别中,并由编译器忽略。
* `RetentionPolicy.CLASS` 标记的注释在编译时由编译器保留,但Java虚拟机`JVM`会忽略。
* `RetentionPolicy.RUNTIME` 标记的注释由`JVM`保留,因此运行时环境可以使用它。
  1. @Documented注释表明,无论何时使用指定的注释,都应使用Javadoc工具记录这些元素。(默认情况下,注释不包含在Javadoc)
  2. @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`
  1. @Inherited注释表明注释类型可以从超类继承。当用户查询注释类型并且该类没有此类型的注释时,将查询类的超类以获取注释类型(默认情况下不是这样)。此注释仅适用于类声明。

  2. @RepeatableJava SE 8中引入的,@Repeatable注释表明标记的注释可以多次应用于相同的声明或类型使用(即可以重复在同一个类、方法、属性等上使用)。

自定义注解

例子

@Documented //javaDoc记录
@Retention(RetentionPolicy.RUNTIME) //运行环境可用
@Target({ElementType.TYPE}) //可用于任何元素
public @interface MyAnn {//自定义一个@Myann(value="")注解
  String value() default "";
}

通过反射获取注解信息

  • 判断是否应用的某个注解
public boolean isAnnotationPresent(Class annotationClass)
  • 获取指定类型的注解信息
public  A getAnnotation(Class annotationClass)
  • 获取所有注解的信息
public Annotation[] getAnnotations()

你可能感兴趣的:(java自定义注解)