前言
注解(Annotation)是Java5开始引入的新特征。它提供了一种安全的类似注释的机制,用来将任何的信息或元数据(metadata)与程序元素(类、方法、成员变量等)进行关联。
元注解
元注解的作用就是负责注解其他注解。它们被用来提供对其它 annotation 注解类型的说明操作。
Java5.0定义的元注解有以下4种:
@Retention
@Target
@Document
@Inherited
1.@Retention 注解
用于描述注解的生命周期,表示需要在什么级别保存该注解,即保留的时间长短。取值类型(RetentionPolicy)有以下几种:
- @Retention(
RetentionPolicy.SOURCE
) //注解仅存在于源码中,在class字节码文件中不包含- @Retention(
RetentionPolicy.CLASS
) // 默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得- @Retention(
RetentionPolicy.RUNTIME
) // 注解会在class字节码文件中存在,在运行时可以通过反射获取到相应的属性值
示例:
@Retention(RetentionPolicy.RUNTIME)
@interface MyTests {
MyTest[] value();
}
上述示例使用 RetentionPolicy.RUNTIME
,这样注解处理器可以通过反射,获取到该注解的属性值,从而去做一些运行时的逻辑处理。使用参考:JDK 8 可重复注解
2.@Target注解
@Target 注解定义了注解的作用目标,用于描述注解的使用范围,即注解在哪儿用。
- @Target(
ElementType.TYPE
) //接口、类、枚举- @Target(
ElementType.FIELD
) //字段、枚举的常量- @Target(
ElementType.METHOD
) //方法- @Target(
ElementType.PARAMETER
) //方法参数- @Target(
ElementType.CONSTRUCTOR
) //构造函数- @Target(
ElementType.LOCAL_VARIABLE
)//局部变量- @Target(
ElementType.ANNOTATION_TYPE
)/注解- @Target(
ElementType.PACKAGE
) //包- @Target(
ElementType.TYPE_PARAMETER
) //泛型(JDK 8 引入)- @Target(
ElementType.TYPE_USE
) //使用在所有的变量类型上(JDK 8 引入)
示例:
@Target(ElementType.TYPE_PARAMETER)
@interface TypeParam{
}
上述示例使用ElementType.TYPE_PARAMETER
表示 TypeParam注解可以用在泛型上面。使用参考:JDK 8 类型注解
3.@Document注解
@Document
注解,说明该注解将被包含在javadoc中。它是一个标记注解,没有成员。
4.@Inherited 注解
@Inherited
注解,用于表示某个被标注的类型是被继承的。如果父类被 @Inherited 注解修饰,说明子类可以继承父类中的该注解。
博主写作不易,来个关注呗
求关注、求点赞,加个关注不迷路 ヾ(◍°∇°◍)ノ゙
博主不能保证写的所有知识点都正确,但是能保证纯手敲,错误也请指出,望轻喷 Thanks♪(・ω・)ノ