@Target注解
- 作用域:
- @Target(ElementType.TYPE)——接口、类、枚举、注解
- @Target(ElementType.FIELD)——字段、枚举的常量
- @Target(ElementType.METHOD)——方法
- @Target(ElementType.PARAMETER)——方法参数
- @Target(ElementType.CONSTRUCTOR) ——构造函数
- @Target(ElementType.LOCAL_VARIABLE)——局部变量
- @Target(ElementType.ANNOTATION_TYPE)——注解
- @Target(ElementType.PACKAGE)——包
- @Target(ElementType.TYPE_PARAMETER)——类型参数声明,JavaSE8引进,可以应用于类的泛型声明之处
- @Target(ElementType.TYPE_USE)——JavaSE8引进,此类型包括类型声明和类型参数声明,是为了方便设计者进行类型检查,例如,如果使用@Target(ElementType.TYPE_USE)对@NonNull进行标记,则类型检查器可以将@NonNull class C {…} C类的所有变量都视为非null
- 其中的ElementType是个枚举,列出了各种情况;@Target注解常用于自定义注解时标注作用范围;一起配套使用的还有@Retention注解;
- 如果一个注解没有指定@Target注解,则此注解可以用于除了TYPE_PARAMETER和TYPE_USE以外的任何地方;
- @Target可以指定多个值,形式如:@Target({ElementType.PACKAGE,ElementType.METHOD})
- 如果注解放到不是自己作用域的位置,会提示not applicable to type不适用于类型
- ElementType.PACKAGE关于包作用域注解,提示Package annotations should be in file package-info.java,可以参考以下链接:
https://www.cnblogs.com/lijingran/p/8586274.html#top
@Retention注解
- 注解的保留位置
- RetentionPolicy.SOURCE: