元注解
一、@Target
注解作用的位置(类、方法、字段……)
1、@Target(ElementType.TYPE)
主要是作用在类上面
2、FIELD
主要是作用在字段(也就是在对象属性上)
3、METHOD
主要作用在方法上面
4、PARAMETER
主要是作用在方法中参数的位置
5、CONSTRUCTOR( constructor)
主要是作用在构造函数上面
6、LOCAL_VARIABLE (variable)
主要作用在局部变量中
7、ANNOTATION_TYPE
主要是作用在注解上面
8、PACKAGE
主要作用在包上面
9、USE
作用在所有的地方
/**
* Type parameter declaration
*
* @since 1.8
*/
TYPE_PARAMETER,
/**
* Use of a type
*
* @since 1.8
*/
TYPE_USE
上面的两个方法都是1.8版本之后引入的
二、@Retention
定义了该Annotation被保留的时间长短
public enum RetentionPolicy {
/**
* Annotations are to be discarded by the compiler.
*/
SOURCE,
/**
* Annotations are to be recorded in the class file by the compiler
* but need not be retained by the VM at run time. This is the default
* behavior.
*/
CLASS,
/**
* Annotations are to be recorded in the class file by the compiler and
* retained by the VM at run time, so they may be read reflectively.
*
* @see java.lang.reflect.AnnotatedElement
*/
RUNTIME
}
1、SOURCE
在源文件中有效,但是注释将被编译器丢弃
2、CLASS
在class文件中有效
3、RUNTIME
@Retention(RetentionPolicy.RUNTIME)
在运行时有效
三、@Inherited
指示注释类型被自动继承。
如果在注释类型声明中存在 Inherited 元注释,并且用户在某一类声明中查询该注释类型,同时该类声明中没有此类型的注释,则将在该类的超类中自动查询该注释类型。此过程会重复进行,直到找到此类型的注释或到达了该类层次结构的顶层 (Object) 为止。如果没有超类具有该类型的注释,则查询将指示当前类没有这样的注释。
注意,如果使用注释类型注释类以外的任何事物,此元注释类型都是无效的。还要注意,此元注释仅促成从超类继承注释;对已实现接口的注释无效。
四、@Repeatable
1.8 版本之后引入的
注释类型java.lang.annotation.Repeatable用于表示其(meta-)注释声明的注释类型是可重复的 。 @Repeatable的值表示可重复注释类型的包含注释类型。