关于@Retention

说明该注解类的生命周期

  • RetentionPolicy.SOURCE : 注解只保留在源文件中,将会被编译器丢弃。
  • RetentionPolicy.CLASS : 注解记录被编译器记录在class文件中,但不需要在运行时由VM保留。默认选项。
  • RetentionPolicy.RUNTIME : 注解记录被编译器记录在class文件中,同时在运行时由VM保留。可以通过反射获得注解。

关于@Target

说明该注解可以被声明在那些元素之前

  • ElementType.TYPE:说明该注解只能被声明在一个类前。
  • ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
  • ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
  • ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
  • ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
  • ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
  • ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
  • ElementType.PACKAGE:说明该注解只能声明在一个包名前。