Appearance
语法要求
- 使用
@interface
定义注解 - 成员使用无参无异常方式声明
- 可以用
default
为成员指定一个默认值 - 成员的类型是受限制的,包括原始类型、
String
、Class
、Annotation
、Enumeration
- 如果注解只有一个成员,则成员名必须取名为
value()
(建议) - 可以没有成员,叫做标识注解
我们先来看一段示例,再接着说
java
@Target({ElementType.TYPE, ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description {
String value();
}
@Target
代表注解可以使用在哪些位置上,常见的 具体取值说明如下列表格
值 | 说明 |
---|---|
TYPE | 类、接口 |
FIELD | 字段声明 |
METHOD | 方法声明 |
PARAMETER | 形参声明 |
CONSTRUCTOR | 构造方法声明 |
LOCAL_VARIABLE | 局部变量声明 |
PACKAGE | 包声明 |
@Retention
内容值如下
值 | 说明 |
---|---|
SOURCE | 在源码显示,编译时丢弃 |
CLASS | 编译时会记录到 class 中,运行时忽略 |
RUNTIME | 运行时存在,可通过反射读取 |
@Inherited
是标识类注解,表示允许子类继承@Documented
生成javadoc
时,包括注解的信息