java注解1 – 元注解

简单整理了一下Annotation相关的内容。

元Annotation就是修饰Annotation的Annotation。

Java有四个元Annotation:@Retention、 @Target、@Documented和@Inherited。

@Retention

@Retention只能用于修饰一个Annotation定义。用于指定被修饰的Annotation可以保留多长时间。

@Retention包含一个RetentionPolicy类型的alue成员变量,所以使用@Retention时必须为该value成员变量指定值。

value成员变量的值只能是如下3个:

  • RetentionPolicy.CLASS:编译器将把Annotation记录在class文件中。当运行Java程序时,JVM不再保留Annotation;
  • RetentionPolicy.RUNTIME:编译器将把Annotation记录在class文件中。当运行Java程序时,JVM也会保留Annotation,程序可以通过反射获取该Annotation信息;
  • RetentionPolicy.SOURCE:Annotation只保留在源代码中,编译器直接丢弃这种Annotation。

@Target

@Target也只能修饰一个Annotation定义,它用于指定被修饰的Annotation能用于修饰哪些程序单元。

@Target元Annotation也包含一个名为value的成员变量,该成员变量的值只能是如下几个:

  • ElementType.TYPE:指定该策略的Annotation可以修饰类、接口(包括注释类型)或枚举定义;
  • ElementType.FIELD:指定该策略的Annotation只能修饰成员变量;
  • ElementType.METHOD:指定该策略的Annotation只能修饰方法定义;
  • ElementType.PARAMETER:指定该策略的Annotation可以修饰参数;
  • ElementType.CONSTRUCTOR:指定该策略的Annotation只能修饰构造器;
  • ElementType.LOCAL_VARIABLE:指定该策略的Annotation只能修饰局部变量;
  • ElementType.ANNOTATION_TYPE:指定该策略的Annotation只能修饰Annotation;
  • ElementType.PACKAGE:指定该策略的Annotation只能修饰包定义。

@Documented

@Documented用于指定被该元Annotation修饰的Annotation类将被javadoc工具提取成文档。

如果定义Annotation类时使用了@Documented修饰,则所有使用该Annotation修饰的程序元素的API文档中将会包含该Annotation说明。

@Inherited

@Inherited元Annotation指定被它修饰的Annotation将具有继承性——如果某个类使用了@A Annotation(定义该Annotation使用了Inherited修饰)修饰,则其子类将自动被@A修饰。

参考文档

########


发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据