1 简介
-
Annotation(注解)用于Java中对元数据的获取,是JDK5.0之后支持的特性。
-
Annotation是代码中的标记,在编译、类加载、运行时可以读取注解,进行相应的处理。
-
Annotation的使用类似于修饰符,可用于修饰包,类,构造器,方法,成员变量,参数,局部变量等任何位置。
-
在代码中添加注解不会改变代码原有的逻辑。
2 常用的注解
JDK内置了一些注解,最常用的有三个:
@override
:保证编译时重写的方法的声明的正确性,只能作用于方法。@Deprecated
:用于表示所修饰的元素(类、方法等)已过时。@SuppressWarnings
:抑制编译器警告。
3 自定义注解
- 使用
@interface
关键字声明注解 - 自定义的注解自动继承
java.lang.annotation.Annotation
接口 - 注解的成员变量用无参方法的形式声明。变量可通过
default
关键字指定默认值。
public @interface MyAnnotation {
String value() default "hello";
}
4 标准元注解
JDK提供了4种标准元注解(对现有注解进行注解——注解的注解):
-
Retention
:指定所修饰的Annotation的声明周期,由RetentionPolicy
枚举:SOURCE
(源文件中有效)CLASS
(字节码文件中有效,默认的声明周期RUNTIME
(在运行时有效),只有声明为RUNTIME的注解才能通过反射获取。
-
Target
:指定所修饰的Annotation能修饰的对象范围,由ElementType
枚举:PACKAGE
(包)TYPE
(类型,包括类,接口、注解、枚举)- 类的成员:
METHOD
、FIELD
、CONSTRUCTOR
等
-
Documented
:指定所修饰的注解在被javadoc解析时保留下来 -
Inherited
:指定所修饰的注解具有继承性——该注解修饰了父类,该父类的子类也会自动被修饰。
5 注解拓展
5.1 可重复注解
默认情况下,对一个目标每个注解只能修饰一次,一下情况会报错:
在jdk8以前,要实现可重复注解,首先创建一个新的注解,该注解的成员为需要重复的注解的数组形式:
@interface MyAnnotations {
MyAnnotation[] value();
}
然后通过@MyAnnotations
实现重复注解:
在jdk8 中,新引入了@Repeatable
元注解,实现可重复注解,此时MyAnnotations
注解的元注解要和MyAnnotation
一致,否则会编译不通过。
这种情况下,可以直接多次使用MyAnnotation
注解: