自定义注解的定义方式
public @interface Class Preamble
一般来说,定义注解需要指定这个注解生效的范围和作用的对象,所以在设计API的人员就设计了几个meta-annotation,官方的定义是这样解释的:作用于其他注解的注解 ( Annotations That Apply to Other Annotations),分别有下面的几个(下面列举几个常用的)
@Retention:存储策略,就是作用范围,指定该注解的有效范围
RetentionPolicy.SOURCE 只在源代码生效,会被编译器忽略
RetentionPolicy.CLASS 只在编译器生效,会在运行时被忽略
RetentionPolicy.RUNTIME 在运行时会生效
@Documented:是不是生成文档
@Target:作用对象
ElementType.ANNOTATION :注解 (@target 就是这类的)
ElementType.CONSTRUCTOR:构造方法
ElementType.FIELD:字段
ElementType.LOCAL_VARIABLE:本地变量
ElementType.METHOD:方法
ElementType.PACKAGE:包
ElementType.PARAMETER:参数
ElementType.TYPE :类
举例说明:
定义:
@Documented
@Retention(CLASS)
@Target(TYPE)
public@interfaceClassPreamble{
String auther();
String date();
intcurrentVersion()default1;
String lastModified()default"N/A";
String lastModifyBy()default"N/A";
//note use of array
String[] reviewers();
}
使用:
@ClassPreamble(
auther="tim",
date ="3/22/2017",
currentVersion = 1,
lastModified ="tim",
lastModifyBy ="tim",
reviewers = {"Alice","Bob","Cindy"}
)
public class Test{}