注解是java5引入的特性。

Mete Annotation

4个元注解,对Annotation类型作说明。

@Target

用于描述Annotation的范围,即被描述的注解可以用在什么地方。

@Target 值【ElementType】

  • TYPE : 类,接口(包括注释类型)或枚举声明
  • FIELD : 字段声明(包括枚举常量)
  • METHOD : 方法声明
  • PARAMETER : 形式参数声明
  • CONSTRUCTOR : 声明构造函数
  • LOCAL_VARIABLE : 声明局部变量
  • ANNOTATION_TYPE : 注释类型声明
  • PACKAGE : 包声明
  • TYPE_PARAMETER : 类型参数声明
  • TYPE_USE : 使用类型

@Retention

定义了Annotation的生命周期。

作用: 表示需要在什么级别保存该注释信息,用于描述注解的生命周期(即:被描述的注解在什么范围内有效)

@Retention值【RetentionPolicy】

  • SOURCE : 只存在源码中,编译时注释将被编译器丢弃。
  • CLASS : 在Class文件中有效。
  • RUNTIME : 在运行时有效。

Documented

用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。
就是说所标注内容可以出现在javadoc中。

@Inherited

继承特性

  1. 指示注释类型被自动继承。
  2. 如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。
  3. 此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。
  4. 如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。
  5. 还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。

@Repeatable

顾名思义说明被这个元注解修饰的注解可以同时作用一个对象多次,但是每次作用注解又可以代表不同的含义。