Java 注解
分类
- 编译器使用 (编译即丢)
@Override:让编译器检查该方法是否正确地实现了覆写;
@SuppressWarnings:告诉编译器忽略此处代码产生的警告
- 由工具处理
.class 文件使用的注解
- 被编入
.class, 但不会常驻内存
- 被一些底层库使用,一般不必处理
- (最常用) 在程序运行期能够读取的注解,它们在加载后一直存在于 JVM 中
- 一个配置了
@PostConstruct 的方法会在调用构造方法后自动被调用
(Java 提供,JVM 并不识别)
定义
- 使用
@interface 语法来定义
- 注解的参数类似无参数方法,可以用
default 设定一个默认值
@Target: 定义 Annotation 能够被应用于源码的哪些位置
- 类或接口:
ElementType.TYPE;
- 字段:
ElementType.FIELD;
- 方法:
ElementType.METHOD;
- 构造方法:
ElementType.CONSTRUCTOR;
- 方法参数:
ElementType.PARAMETER。
- 只有一个元素时,可以省略数组的写法????
@Retention: 定义了 Annotation 的生命周期
- 仅编译期:
RetentionPolicy.SOURCE;
- 仅 class 文件:
RetentionPolicy.CLASS;(default)
- 运行期:
RetentionPolicy.RUNTIME。(more)
@Inherited: 子类是否可继承父类
@Repeatable: 这个元注解可以定义 Annotation 是否可重复
Collections
References