首页 > 代码库 > 自定义annotation
自定义annotation
自定义annotation格式:
定义简单annotation:
public @interface MyDefaultAnnotationArrayParam{
}
使用简单annotation:
@MyDefaultAnnotationArrayParam class Demo{ };
此时表示在Demo类上使用annotation。
还可以向annotation中设置内容,使用变量接收参数。
public @interface MyDefaultAnnotationSingleParam{ public String value() ; // 接收设置的内容 }
在使用的时候,必须清楚指明变量的内容。
@MyDefaultAnnotationSingleParam("李兴华")
class Demo{
};
或者可以使用明确标记,表示内容赋给哪个参数。
@MyDefaultAnnotationSingleParam(value="http://www.mamicode.com/李兴华") class Demo{ };
以上参数是赋值给value属性的,
既然可以赋值给一个参数,也可赋值给多个参数。
例如对于这个annotation
public @interface MyDefaultAnnotationMoreParam{
public String key() ;
public String value() ; // 接收设置的内容
}
在使用的时候需要设置两个参数,一个是key,一个是value。
@MyDefaultAnnotationMoreParam(key="MLDN",value="http://www.mamicode.com/李兴华")
class Demo{
};
也可以设置一个数组进去:
public @interface MyDefaultAnnotationArrayParam{ public String[] value() ; // 接收设置的内容 }
接收内容本身应该是一个数组,类似之前的SuppressWarnings。
@MyDefaultAnnotationArrayParam(value=http://www.mamicode.com/{"MLDN","李兴华"})
class Demo{
};
以上全部annotation有一个特点,所有使用的时候使用注释的时候设置上去。
也可以为参数设置默认内容,在声明的时候使用Default即可。
public @interface MyDefaultAnnotationValue{ public String key() default "MLDN" ; // 指定好了默认值 public String value() default "李兴华" ; // 指定好了默认值 }
当使用的时候,就可以不再设置内容了。不报错,如下。
@MyDefaultAnnotationValue
class Demo{
};
操作中,对于一个annotation而言,有时候会固定其取值范围,只能取固定几个值。此时需要依靠枚举。
首先定义一个枚举:
public enum MyName{ // 定义枚举类型
MLDN,LXH,LI ;
}
以后的annotation的取值只能从这三个值中取。
使用:
public @interface MyDefaultAnnotationEnum{
public MyName name() default MyName.LXH ; // 指定默认值,默认值是通过一个枚举变量设置,注意此时的name()的类型是枚举类型。
}
以上annotation已经设置好了一个枚举中的内容作为默认值,那么外部使用此annotation的时候,也需要从枚举中固定取值。
@MyDefaultAnnotationEnum(name=MyName.LI) //因为annotation使用的是默认值,而且参数类型是枚举型,所以设置参数也是枚举型,只能从固定枚举中取值
class Demo{
};
retention和retentionpolicy
retentionpolicy三个取值范围,
在三个范围中,最重要的是RUNTIME,因为执行时候起作用。
使用retention制定一个annotation的范围,范围为RUNTIME范围。
import java.lang.annotation.Retention ;
import java.lang.annotation.RetentionPolicy ;
@Retention(value=RetentionPolicy.RUNTIME) // 表示此Annotation在运行时有效
public @interface MyDefaultRententionAnnotation{
public String name() default "李兴华" ;
}
此annotation可以在运行时候起作用,而且在以后讲解反射与annotation操作中,也必须使用此种范围。
总结
1,annotation的定义格式,以及变量类型:枚举,数组,普通变量。
2,retention,retentionPolicy的作用。
自定义annotation