自定义注解的语法要求
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
public @interface Description{
String desc();
String author();
int age() default 18;
}
1.使用@interface关键字定义注解
2.成员以无参无异常方式声明
3.可以用dafult关键字为成员指定一个默认值
4.成员类型是受限的,合法的类型包括原始类型及String,Class,Annotation,Enumeration
5.如果注解只有一个成员,则成员名必须取名为value(),在使用时可以忽略成员名和赋值号(=)
6.注解类可以没有成员,没有成员的注解称为标识注解。
元注解
java元注解有以下几个
@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Inherited
@Documented
1.@Target
注解的作用域。
作用域包括:CONSTRUCTOR 构造方法声明
FIELD 字段声明
LOCAL_VARIABLE 局部变量声明
METHOD 方法声明
PACKAGE 包声明
PARAMETER 参数
TYPE 类,接口
2
.
@Retention
注解的生命周期。
包括:
SOURCE 只在源码显示,编译时会丢弃
CLASS 编译时会记录到class中,运行时忽略
RUNTIME 运行时存在,可以通过反射读取
3
.
@Inherited
允许子类继承(标识性注解)
4.@Documented
生成javadoc时会包含注解(标识性注解)