- 作者: 酥仁
- 时间:
- 分类: 技术
什么是 Annotation
- 一种可以加到 Java 代码中的语法形式
- 可以加到指定的 Target 上,Target 类型由 ElementType 定义
为什么需要 Annotation
- 提醒编译器检查,比如 @Override
- XML 配置离得太远
Java 预定义的注解
- Override:编译器用来检查是否重写了父类
- Deprecated:标记 Target 被废弃,如果使用了 Target,编译器会报 warning
- SuppressWarnings:支持编译器不要报告指定的 warning
- Retention:Meta Annotations, 标记 Annotation 的保留时间
- SOURCE:仅在代码中,被编译器忽略
- CLASS:保留到编译阶段,不会保留到 Java 虚拟机运行时
- RUNTIME:保留到 Java 虚拟机运行时
- Documented:Meta Annotations,标记 Annotation 应当出现在 JavaDoc 中
- Target:Meta Annotations,标记 Annotation 应当用在哪些类型上,见 ElementType
- Inherited:Meta Annotations。如果使用到 A 类上,A 类的子类,都会被标记。
- SafeVarargs:指明使用可变长度范型类型参数的方法和构造器是安全的
- FunctionalInterface:指明 Interface 是一个 functional interface
- Repeatable:指明对同一个 Target 可以使用多次注解
Meta Annotations
- 用于 Annotation 的 Annotation
ElementType:可注解的 Target 枚举
- TYPE:类,接口(包括 Annotation),枚举
- FIELD:类的成员变量,枚举常量
- METHOD:方法
- PARAMETER:方法的传参
- CONSTRUCTOR:构造函数
- LOCAL_VARIABLE:局部变量
- ANNOTATION_TYPE:注解
- PACKAGE:package 声明上
- TYPE_PARAMETER:可以用在 Type(类型)的声明式前
- TYPE_USE:可以用在所有使用 Type(类型)的地方
Annotation 是如何起作用的
- 编译器读取
- 代码中通过反射读取 Annotation 信息
参考
标签: none