JAVA中的自定义注解
-
我们通常在注解中定义属性,以下这个是Annotation的name属性
看着像一个方法,实际上我们称之为属性name -
使用了default指定了默认值,在声明注解时不填写实参则会默认赋予默认值
public @interface Annotation01 {
/*
我们通常在注解中定义属性,以下这个是Annotation的name属性
看着像一个方法,实际上我们称之为属性name
*/
//使用了default指定了默认值
String name() default "张三";
}
@Annotation01(name = "123")
public void doSome(){
}
//使用了name默认值
@Annotation01
public void doOther(){
}
- 如果一个注解的属性的名字是value的话且仅有一个属性,那么在使用的时候,该属性名可以省略
public @interface Annotation02 {
/*
指定一个value属性
如果一个注解的属性的名字是value的话,在使用的时候,该属性名可以省略
但如果
*/
String value();
}
//注解中使用value作为属性名,在声明时可以省略value
@Annotation02("abc")
public void doAnother(){
}
- 如果除了value之外还有其他属性的话,那么在声明时value仍需要声明
- 属性可以是一个数组
public @interface Annotation03 {
//如果除了value之外还有其他属性的话,那么在声明时value仍需要声明
String value();
int age();
//属性是一个数组
String[] str();
}
@Annotation03(value = "abc", age = 12, str = {"abc","edf"})
public void doAnotherOther(){
}
- 使用元注解Target、Retention
- 只允许该注解可以标注构造方法,属性,方法
- 允许这个注解可以被反射
@Target({CONSTRUCTOR, FIELD,TYPE,METHOD})//只允许该注解可以标注构造方法,属性,方法
@Retention(RetentionPolicy.RUNTIME)//允许这个注解可以被反射
public @interface Annotation04 {
String value();
}
@Annotation04("abc")//用于标注方法
public void doDoDo(){
}