@Target
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Target {
/**
* 注解可作用的位置
*/
ElementType[] value();
}
public enum ElementType {
/** 接口、类、枚举 */
TYPE,
/** 字段、枚举的常量 */
FIELD,
/** 方法 */
METHOD,
/** 方法参数 */
PARAMETER,
/** 构造函数 */
CONSTRUCTOR,
/** 局部变量 */
LOCAL_VARIABLE,
/** 注解 */
ANNOTATION_TYPE,
/** 包 */
PACKAGE,
/**
* 参数类型声明
*/
TYPE_PARAMETER,
/**
* 类型的使用
*/
TYPE_USE
}
@Retention
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Retention {
/**
* 保留策略
*/
RetentionPolicy value();
}
public enum RetentionPolicy {
/**
* 注解仅存在于源码中,不会被编译
*/
SOURCE,
/**
* 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得
*/
CLASS,
/**
* 注解会在class字节码文件中存在,在运行时可以通过反射获取到
*/
RUNTIME
}
@Documented
说明该注解将被包含在javadoc中
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Documented {
}
@Inherited
说明子类可以继承父类中的该注解
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.ANNOTATION_TYPE)
public @interface Inherited {
}