java元注解
定义注解时,会需要一些元注解
@Retention
表示在什么级别保存该注解信息。可选的参数值在枚举类型 RetentionPolicy 中,包括:
- RetentionPolicy.SOURCE:指定注解只保留在源文件当中,注解将被编译器丢弃
- RetentionPolicy.CLASS:指定注解只保留在class文件中,但会被VM丢弃
- RetentionPolicy.RUNTIME:指定注解可以保留在程序运行期间,VM将在运行期也保留注释,因此可以通过反射机制读取注解的信息
@Retention(value = RetentionPolicy.RUNTIME)
@Target
用来定义你的注解将应用于什么地方(例如是一个方法或者一个域)。可能的值在枚举类 ElemenetType 中,包括:
- ElementType.TYPE:说明该注解只能被声明在一个类、接口、枚举前。
- ElementType.FIELD:说明该注解只能被声明在一个类的字段前。
- ElementType.METHOD:说明该注解只能被声明在一个类的方法前。
- ElementType.PARAMETER:说明该注解只能被声明在一个方法参数前。
- ElementType.CONSTRUCTOR:说明该注解只能声明在一个类的构造方法前。
- ElementType.LOCAL_VARIABLE:说明该注解只能声明在一个局部变量前。
- ElementType.ANNOTATION_TYPE:说明该注解只能声明在一个注解类型前。
- ElementType.PACKAGE:说明该注解只能声明在一个包名前。
@Target(value = {ElementType.METHOD,ElementType.TYPE})
@Inherited
表明该注解将会被子类继承
@Documented
作用是在生成JavaDoc文档时,该注解也会出现在javaDoc文档中
代码案例
/**
* 元注解
*/
@MyAnnotation
public class Test2 {
}
//@Target定义我们的注解可以用到那些地方
@Target(value = {ElementType.METHOD,ElementType.TYPE})
//@Retention定义我们的注解在什么地方有效
@Retention(value = RetentionPolicy.RUNTIME)
//@Documented表示是否将注解生成在JAVAdoc中
@Documented
//@Inherited子类可以继承父类的注解
@Inherited
@interface MyAnnotation{
}