元注解
即注解的注解,元注解的作用就是用来负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型.分别是 @Target
、@Retention
、@Documented
、@Inherited
@Target
用来描述注解的使用范围,即注解放在什么地方,可以是 类(Class)、接口、方法、成员变量、枚举等等
以下是取值范围:
1.CONSTRUCTOR:用于描述构造器
2.FIELD:用于描述域
3.LOCAL_VARIABLE:用于描述局部变量
4.METHOD:用于描述方法
5.PACKAGE:用于描述包
6.PARAMETER:用于描述参数
7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
@Retention
该标识表示 注解的有效区间。即使在源码中、还是编译期间、或者运行时。 取值范围如下:
1.SOURCE:在源文件中有效(即源文件保留)
2.CLASS:在class文件中有效(即class保留)
3.RUNTIME:在运行时有效(即运行时保留)
@Documented
Documented用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。Documented是一个标记注解,没有成员
@Inherited
@Inherited 标识的注解是可以被继承的,如果这个注解(@Inherited标识的自定义注解) 是放在一个Class 类的上面,那么它的子类是可以继承到的。
需要注意到的是,一个类不从它实现的接口继承,一个方法不从它所重载的方法继承,说直白点,就是这种继承不适用于 实现接口与方法的重载
自定义注解
定义注解格式:
public @interface 注解名 {定义体}
简要说明:
1.使用@interface来自定义注解时,自动继承了 java.lang.annotation.Annotation,由编译程序自动完成细节。
2.不能继承其他的注解或者接口。
3.定义体中的方法实际上是声明了一个配置参数。返回值类型就是参数的类型(只能是 基本数据类型、Class、String、enum、Annotation、以及以上的数组类型) 可以使用default 来声明参数的 默认值。
只能使用public 或者 defalut 。
String value(); // 这里使用的是默认的default 类型
如果只有一个成员,最好使用 value()
。
单纯的写自定义注解时没有任何作用的,对于自定义注解的处理可以使用 Apt 注解处理器。