元注解(注解的注解):如自定义注解,需要被元注解修饰,定义该注解类的一些基本特征。
元注解:@Target、@Retention、@Documented、@Inherited、@Repeatable。
@Target(ElementType.TYPE):定义注解使用的位置;括号内为定义的使用位置,数组形式,可以定义多个使用位置
ElementType枚举元素 | 元素指定的使用范围 |
---|
TYPE | lass,interface,enum–类,接口,枚举 |
FIELD | field–字段(包括枚举常量) |
METHOD | method–方法声明 |
PARAMETER | parameter–形式参数声明 |
CONSTRUCTOR | constructor–构造方法 |
LOCAL_VARIABLE | localVariable–局部变量 |
ANNOTATION_TYPE | annotation–注解类型 |
PACKAGE | package–包上 |
TYPE_PARAMETER | 类型参数–可以用于类的泛型声明 |
TYPE_USE | 包括类型声明和类型参数声明 |
@Retention: 定义注解的生命周期
RetentionPolicy枚举元素 | 元素使用生命周期 |
---|
SOURCE | 源码级别保留,编译时忽略注解作用 |
CLASS | 编译级别保留,编译后的class文件中存在,在jvm运行时丢弃,这是默认值 |
RUNTIME | 运行级别保留,编译后的class文件中存在,在jvm运行时保留,可以被反射调用 |
@Documented:定义注解的标记功能:Javadoc工具会将此注解标记的注解的信息包含在javadoc中
@Documented
public @interface TestDoc {
String doc();
}
public class TestDocAnnotations{
@TestDoc(doc="hello world")
public void testJavaDoc(){
System.out.printf("@Document");
}
}
javadoc -d help -author -version TestDocAnnotations.java
@Inherited注解
- 如果自定义注解使用了该注解,当前自定义注解被A类引用后,A类的子类会继承该自定义注解;
- 此注解只对(引用该注解的)自定义注解标记的超类有效,对接口是无效的。
@Repeatable注解
- 解决一个类上不能标注重复的注解,值一般是另一个注解,