自定义注解
步骤
第一步,用@interface
定义注解:
在类中声明可以去掉public
public @interface Report {
}
第二步,元注释配置注解
@Target
最常用的元注解是
@Target
。使用@Target
可以定义Annotation
能够被应用于源码的哪些位置:
- 类或接口:
ElementType.TYPE
;- 字段:
ElementType.FIELD
;- 方法:
ElementType.METHOD
;- 构造方法:
ElementType.CONSTRUCTOR
;- 方法参数:
ElementType.PARAMETER
。@Retention
@Retention
定义Annotation
的生命周期:
- 仅编译期:
RetentionPolicy.SOURCE
;- 仅class文件:
RetentionPolicy.CLASS
;- 运行期:
RetentionPolicy.RUNTIME
。@Repeatable
使用
@Repeatable
这个元注解可以定义Annotation
是否可重复 //不常用@Inherited
使用
@Inherited
定义子类是否可继承父类定义的Annotation
@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
必须设置
@Target
和@Retention
,@Retention
一般设置为RUNTIME
,因为我们自定义的注解通常要求在运行期读取。一般情况下,不必写@Inherited
和@Repeatable
。
第三步,添加参数、默认值
参数类型+参数名()
有默认值可以不写参数,没有默认值必须给注解赋值,支持显式赋值
public class test () {
@MyAnnotation(id = 2,name = "testAnnotation")
public void test() {}
}
public @interface MyAnnotation {
int id() default -1;
String name() default "";
}
如果注解只有一个参数,参数名为value,赋值时可以不用写参数名
public class test () {
@MyAnnotation("testAnnotation")
public void test() {}
}
@interface MyAnnotation {
String value() default "";
}