元注解
- 元注解对其他注解类型进行注解;
- java.lang.Annotation 包中提供了4个标准元注解:@Target @Retention @Documented @Inherited;
1. @Target
- 指定注解所作用的程序元素的种类,若注解类型声明中存在 @Target,则编译器强制实施指定的类型限制,若不存在 @Target,则可以作用在任一程序元素上;
a. 取值
枚举常量 | 说明 |
---|
ANNOTATION_TYPE | 注解泛型声明 |
CONSTRUCTOR | 构造方法声明 |
FIELD | 字段(包括枚举常量)声明 |
METHOD | 方法声明 |
PACKAGE | 包声明 |
PARAMETER | 参数声明 |
TYPE | 类、接口(包括注解类型)或枚举声明 |
LOCAL_VARIABLE | 局部变量声明 |
TYPE_PARAMETER | 参数声明 |
TYPE_USE | 用户类型声明 |
b. 定义
- Target 的值包括 {} 表示它的值有多个,多个值之间用逗号隔开;
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@interface Method {
}
c. 使用
import java.lang.annotation.ElementType;
import java.lang.annotation.Target;
@Target({ElementType.METHOD})
@interface Method {
}
public class Test {
@Method
void method() {
System.out.println("here");
}
}
2. @Retention
- 指定需要在什么级别保留该注释信息,用于描述注解的生命周期,即被描述的注解在什么范围内有效;
a. 取值
- @Retention 的取值是枚举类 RetentionPolicy 的成员;
枚举常量 | 说明 |
---|
CLASS | 在 class 文件中有效(即在 class 中保留) |
RUNTIME | 在运行时有效(即在运行时保留) |
SOURCE | 在源文件中有效(即在源文件中保留) |
b. 使用
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@interface Runtime {
}
3. @Documented
- 指某一类型的注释通过 javadoc 和类似的默认工具进行文档化;
a. 使用
import java.lang.annotation.*;
@Target(ElementType.FIELD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface Document{}
4. @Inherited
- 默认情况下,父类的注解是不会被子类继承的,只有使用元注解 @Inherited 的注解才可以被子类继承;
a. 定义
import java.lang.annotation.*;
@Inherited
@interface Inherite{
String inher();
}
b. 使用
- 父类使用Inherite注解,它的子类就会继承Inherite注解;
import java.lang.annotation.*;
@Inherited
@interface Inherite{
String inher();
}
@Inherite(inher ="继承")
public class Test{
public void method(){
System.out.println("父类方法");
}
}