RetentionPolicy.SOURCE 注解只在源码阶段保留,在编译器进行编译时它将被丢弃忽视。
RetentionPolicy.CLASS 注解只被保留到编译进行的时候,它并不会被加载到 JVM
中。//那么在编译的时候编译器检测到这个注解,如果有错误,会报错
Annotation类型使用关键字@interface而不是interface
这个关键字声明隐含了一个信息:它是继承了java.lang.annotation.Annotation接口,并非声明了一个interface
Java注解深入浅出
public @interface MyAnnotation { /* 注解当中的属性可以是哪一种类型? 属性的类型可以是: byte short int long float double boolean char String Class 枚举类型;不可以是其他类型 以及以上每一种的数组形式。 */ int value1(); String value2(); int[] value3(); String[] value4(); Season value5(); Season[] value6(); Class parameterType(); Class[] parameterTypes(); } //注解有数组类型的话,{}可以省略; //注解内有元素的话,()不可省略 public @interface OtherAnnotation { /* 年龄属性 */ int age(); /* 邮箱地址属性,支持多个 */ String[] email(); /** * 季节数组,Season是枚举类型 * @return */ Season[] seasonArray(); } / public class OtherAnnotationTest { // 数组是大括号 @OtherAnnotation(age = 25, email = {"zhangsan@123.com", "zhangsan@sohu.com"}, seasonArray = Season.WINTER) public void doSome(){ } // 如果数组中只有1个元素:大括号可以省略。 @OtherAnnotation(age = 25, email = "zhangsan@123.com", seasonArray = {Season.SPRING, Season.SUMMER}) public void doOther(){ } }