在Java开发中,特别框架中充拆着各种注解,注解是放在Java源码的类、方法、字段、参数前的一种特殊“注释”。应用场景可以通过反射给类赋值。
在这里做个示例给演示一下
定义一个注解
@Retention(RetentionPolicy.RUNTIME)//定义在运行时启用
public @interface MyAnnotation {
//定义一个变量
public String name();//变量
public int age();//单个变量
public String[] like() default {"打球","唱歌"};//数组 给默认值
public dpclass dp() default dpclass.d1; //枚举 给默认值
}
在学习类上使用注解
@MyAnnotation(name = "张三",age =11)//启用注解 具有默认值的注解可以不指定,否则必须要指定
public class Stu {
private String name;
private int age;
public dpclass cl;
private String[] like;
public Stu() {
}
public Stu(String name, int age, dpclass cl) {
this.name = name;
this.age = age;
this.cl = cl;
}
public void setLike(String[] like) {
this.like = like;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public dpclass getCl() {
return cl;
}
public void setCl(dpclass cl) {
this.cl = cl;
}
@Override
public String toString() {
return "Stu{" +
"name='" + name + '\'' +
", age=" + age +
", cl=" + cl +
", like=" + Arrays.toString(like) +
'}';
}
}
注解通过反射实现类赋值
Class<Stu> stuClass = Stu.class;
MyAnnotation annotation = stuClass.getAnnotation(MyAnnotation.class);
String name = annotation.name();
int age = annotation.age();
String[] like = annotation.like();
dpclass dp = annotation.dp();
Stu stu=stuClass.newInstance();
stu.setAge(age);
stu.setCl(dp);
stu.setName(name);
stu.setLike(like);
System.out.println(stu.toString());
效果
Stu{name=‘张三’, age=11, cl=d1, like=[打球, 唱歌]}