使用 @interface 定义注解,格式如下:

public @interface Report {
    int type() default 0;
    String level() default "info";
    String value() default "";
}

其中 default 可以指定一个默认值,value 应该用于指定常用的参数,因为省略参数名时 默认使用 value

元注解

用来设置你所定义的注解的属性

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