注解定义@interface
public @interface Report {
int type() default 0;
String level() default "info";
String value() default "";
}
注解的成员
- 支持基本数据类型
- String 类型
- 枚举/枚举数组
- 注解/注解数组
PS : 大部分注解会有一个名为value的配置参数,对此参数赋值,可以只写常量,相当于省略了value参数
注解中的value成员,在使用的时候,可以省略 value=
如果在使用注解的时候,显示的使用了多个成员,那么value 不能省略
处理注解的方法
- isAnnotationPresent(class)
是否有某个注解 - getAnnotation(class)
获取某个注解 - Method#getParameterAnnotations()
获取某方法的参数注解、返回二维数组
元注解
有一些注解可以修饰其他注解,这些注解就称为元注解(meta annotation)
(只有加上元注解,才可以使用)
- 1.@Target (目标)
注解在源码中的使用位置
- ElementType.TYPE
类或接口- ElementType.FIELD
field 属性- ElementType.METHOD
方法- ElementType.CONSTRUCTOR
构造方法- ElementType.PARAMETER
方法参数
- 2.@Retention (保留)
定义注解的生命周期
- RetentionPolicy.SOURCE
仅编译阶段- RetentionPolicy.CLASS
仅 class 阶段 (默认)- RetentionPolicy.RUNTIME
运行阶段(常用)
- @Repeatable
是否允许在同一位置重复定义注解 - @Inherited (继承)
是否允许 子类继承注解
只适用与ElementType.Type, 接口中无效 - @Documented
在使用 javadoc 时,类上是否生成注解文档