整理一下,要不老忘。。。
元注解的作用就是负责注解其他注解。Java5.0定义了4个标准的meta-annotation类型,它们被用来提供对其它 annotation类型作说明。Java5.0定义的元注解有以下几种:
- @Target
- @Retention
- @Documented
- @Inherited
@Target
用于描述注解的范围,即注解在哪用。它说明了Annotation所修饰的对象范围,取值类型(ElementType)有以下几种:
public enum ElementType {
/** 类、接口(包括注解类型)或枚举声明*/
TYPE,
/** 字段声明(类属性)(包括枚举常量) */
FIELD,
/** 方法声明 */
METHOD,
/** 形式参数声明(方法中的param) */
PARAMETER,
/** 构造函数声明 */
CONSTRUCTOR,
/** 方法局部变量声明 */
LOCAL_VARIABLE,
/** 注解类型声明 */
ANNOTATION_TYPE,
/** 包装声明 */
PACKAGE,
/**
* 类型参数声明
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* 使用类型(可以在任意地方使用)
*
* @since 1.8
*/
TYPE_USE
}
-
其中 PACKAGE 类型比较特别,如下图可以利用开发工具创建 package-info.java 样式的文件,然后可以将注解加在package关键字上。
TYPE_PARAMETER 类型一般放在方法范型上
public <@Anno T> void test() {
}
@Retention
用于描述注解的生命周期,表示需要在什么级别保存该注解,即保留的时间长短。取值类型(RetentionPolicy)有以下几种:
- SOURCE : 在源文件中有效(即源文件保留)
- CLASS : 在class文件中有效(即class保留)
- RUNTIME : 在运行时有效(即运行时保留)
@Documented
用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被例如javadoc此类的工具文档化。它是一个标记注解,没有成员。
@Inherited
作用:如果一个类用上了@Inherited修饰的注解,那么其子类也会继承这个注解,子类也可以通过反射获取到这个注解