Skip to content

语法要求

  1. 使用 @interface 定义注解
  2. 成员使用无参无异常方式声明
  3. 可以用 default 为成员指定一个默认值
  4. 成员的类型是受限制的,包括原始类型、StringClassAnnotationEnumeration
  5. 如果注解只有一个成员,则成员名必须取名为 value()(建议)
  6. 可以没有成员,叫做标识注解

我们先来看一段示例,再接着说

java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
    String value();
}
  1. @Target 代表注解可以使用在哪些位置上,常见的 具体取值说明如下列表格
说明
TYPE类、接口
FIELD字段声明
METHOD方法声明
PARAMETER形参声明
CONSTRUCTOR构造方法声明
LOCAL_VARIABLE局部变量声明
PACKAGE包声明
  1. @Retention 内容值如下
说明
SOURCE在源码显示,编译时丢弃
CLASS编译时会记录到 class 中,运行时忽略
RUNTIME运行时存在,可通过反射读取
  1. @Inherited是标识类注解,表示允许子类继承

  2. @Documented 生成javadoc时,包括注解的信息