java自定义注解时需要用到几个基本注解,成为“元注解”
元注解有四个:
@Retention
@Target
@Document
@Inherited
@Retention:注解的保留位置
@Retention(RetentionPolicy.SOURCE) //注解仅存在于源码中,在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得,
@Retention(RetentionPolicy.RUNTIME) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到
@Target:注解的作用目标
@Target(ElementType.TYPE) //用于接口、类、枚举、注解 ①
@Target(ElementType.FIELD) //字段、枚举的常量 ②
@Target(ElementType.METHOD) //方法 ③
@Target(ElementType.PARAMETER) //方法参数 ④
@Target(ElementType.CONSTRUCTOR) //构造函数 ⑤
@Target(ElementType.LOCAL_VARIABLE) //局部变量 ⑥
@Target(ElementType.ANNOTATION_TYPE) //用于注解类,类似ElementType.TYPE ⑦
@Target(ElementType.PACKAGE) ///包 ⑧
@Target(ElementType.TYPE_PARAMETER) //键入参数声明(since 1.8) ⑨
@Target(ElementType.TYPE_USE) //使用类型 (since 1.8) ⑩
当允许注解在多处使用时:
@Target({ElementType.PARAMETER,ElementType.METHOD})
各注解样例
@TypeAnnotation //ElementType.TYPE ①
public class TestAnnotation {
@FieldAnnotation //ElementType.FIELD ②
private String field;
@ConstructorAnnotation //ElementType.CONSTRUCTOR ⑤
public TestAnnotation() {
}
@MethodAnnotation //ElementType.METHOD ③
public String testMethod(@ParameterAnnotation String parameter, //ElementType.PARAMETER ④
String anotherParameter) {
@LocalVariableAnnotation String localVariable; //ElementType.LOCAL_VARIABLE ⑥
return parameter;
}
}
另外几个相比于上面几个有点特殊
/**
* ElementType.PACKAGE定义的注解只能用于 package-info.java
* 详见:https://blog.csdn.net/achuo/article/details/50610559
*/
@PackageAnnotation //ElementType.PACKAGE ⑧
package neo.tao;
import neo.tao.annotation.PackageAnnotation;
/**
* ElementType.ANNOTATION_TYPE 在定义注解时用于注解类上
* /
@AnnotationTypeAnnotation //ElementType.ANNOTATION_TYPE ⑦
@TypeAnnotation
public @interface TestAnnotationTypeAnnotation {
}
还剩两个是jdk 1.8之后加入的,自己没有尝试过,就不照搬百度介绍了,可自行学习