注解与定义接口有点类似,都用interface , 不过注解的interface 前多了@. 另外, 它还有两个元注解@Target 和 @Retention 这两个注解专门用于定义注解本身.@Target 表示注解的目标,
ElementType 是一个枚举 ,主要的可选值有:
TYPE : 表示类 接口
FIELD: 字段 包括枚举常量
METHOD : 方法
PARAMETER: 方法中的参数
CONSTRUCTOR : 构造方法
LOCAL_VARIABLE: 本地变量
MODULE: 模块
Retention 表示注解信息保留到什么时候,取值只有一个, 类型是RetenionPolicy , 它是一个枚举, 有三个取值.
SOURCE: 只在源代码中保留,编译器代码编译为字节码文件后会丢掉.
CLASS : 保留到字节码文件中,但Java 虚拟机将class 文件加载到内存时不一定会在内存保留.
RUNTIME: 一直保留到运行时
如果没有声明@Retenion , 则默认为CLASS
与接口和类不同, 注解不能继承. 不过注解有一个与继承有关的元注解@Inherited
查看注解信息
//查看所有的注解
public Annotation[] getAnnotation()
//获取所有本元素上声明的注解, 忽略inherited
public Annotation[] getDeclaredAnnotations()
//获取指定类型的注解
public <A extends Annotation> A getAnnotation(Class<A> annotationClas)
//判断是否有指定类型的注解
public boolean isAnnotationPresent(Class<? extends Annotation> annotationClass )
网友评论