元注解
# 元注解
元注解:用于描述注解的注解
# @Target:描述注解能够作用的位置
属性 ElementType(是一个枚举类)的有如下取值:
- TYPE:可以作用于类上
- METHOD:可以作用于方法上
- FIELD:可以作用于成员变量上
例如 Override 的注解
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
1
2
3
4
2
3
4
如果要填写多个值,用花括号:
@Target({ElementType.METHOD, ElementType.FIELD})
1
# @Retention:描述注解被保留的阶段
Java 代码有 3 个阶段:源码阶段,Class 类阶段,运行时阶段
属性 RetentionPolicy(也是一个枚举类)的取值:
- Source:源代码阶段,即该注解只会保留在源文件中,编译时编译器会忽略该注解,例如 @Override 注解
- Class:Class 类阶段,保存在字节码文件(.class) 中,注解会随着编译跟随字节码文件中,但是运行时不会对该注解进行解析
- RUNTIME:一直保存到运行时,用得最多的一种保存策略,在运行时可以获取到该注解的所有信息
只有注解的 Retension
标注为 RUNTIME
时,才能够通过反射获取到该注解
# @Documented:描述注解是否被抽取到 API 文档中
如果使用了,那么 API 文档中会有。
# @Inherited:描述注解是否被子类继承
# 源注解使用举例
/**
元注解:用于描述注解的注解
* @Target:描述注解能够作用的位置
* @Retention:描述注解被保留的阶段
* @Documented:描述注解是否被抽取到api文档中
* @Inherited:描述注解是否被子类继承
*/
import java.lang.annotation.*;
@Target({ElementType.TYPE, ElementType.METHOD, ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface MyAnno4 {
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
上次更新: 2024/10/1 18:45:09