概念
标准注解
标准注解指的是Java自带的三个注解:Override
、Deprecated
、SuppressWarnings
Override
表示当前方法覆盖超类中的方法
Deprecated
表示已经过时,不建议使用
SuppressWarnings
关闭不正当的编译器警告
元注解
所谓的元注解,就是用来定义注解的注解,即是我们可以利用元注解来自定义其他注解。元注解有 @Target
、@Retention
、@Document
、@Inherit
。
@Target
表示该注解用于什么地方. ElementType
参数包括:CONSTRUCTOR
: 构造器的声明FIELD
: 域声明(包括 enum)LOCAL_VARIABLE
: 局部变量声明METHOD
: 方法声明PACKAGE
: 包声明PARAMETER
: 参数声明TYPE
: 类、接口(包括注解类型)或enum 声明
@Retention
表示需要在什么级别保存该注解信息。可选的 RetentionPolicy
参数包括:SOURCE
:注解将被编译器丢弃CLASS
:注解在 class 文件中可用,但会被 JVM 丢弃RUNTIME
:JVM 运行时保留注解,可通过反射获取注解信息
@Document
将次注解包含在 JavaDoc 中
@Inherit
允许子类继承父类的注解
示例
注解元素
从上面这个例子可以看出,定义注解有点类似定义接口,注解名类似接口名,注解元素类似方法。与接口定义不同,注解元素的类型有严格的限制,下面是注解元素的支持的类型。
- 所有基本类型
- String
- Class
- enum
- Annotation
- 以上类型的数组
默认值限制
编译器对注解元素的默认值比较挑剔,注解元素不能有不确定的值。意思是注解元素要么有默认值,要么使用注解时提供。
注解处理器
开头的时候我们就说了,「注解是为我们在代码中添加信息提供了一种形式化的方法,使我们在稍后某个时刻非常方面地使用这些数据。」,所以定义了注解,我们得想方法提取注解中的信息,为我们所用,因此需要写一个注解处理器。下面是从《Java 编程思想》摘取的例子,用于寻找缺失的用例。
1. 定义注解
2. 使用注解
3. 注解处理器
运行结果:
参考
《Java 编程思想》