首先反射注解,那么保留策略必须是Runtime,也就是@Retention(RetentionPolicy.RUNTIME)
①定义一个注解类
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
public @interface MyAnnotation {
int value();
}
②在定义一个类使用注解类
public class MyBean {
@MyAnnotation(20)
private int value;
@Override
public String toString() {
return String.valueOf(value);
}
}
③在main方法里面反射注解
public static void main(String[] args) {
try {
Field field = MyBean.class.getDeclaredField("value");//获取成员变量value
field.setAccessible(true);//将value设置成可访问的
if(field.isAnnotationPresent(MyAnnotation.class)){//判断成员变量是否有注解
MyAnnotation myAnnotation = field.getAnnotation(MyAnnotation.class);//获取定义在成员变量中的注解MyAnnotation
int value = myAnnotation.value();//获取定义在MyBean的MyAnnotation里面属性值
MyBean myBean=new MyBean();
field.setInt(myBean, value);//将注解的值20可以赋给成员变量value
System.out.println(myBean);//验证结果
}
} catch (Exception e) {
e.printStackTrace();
};
}
输出结果

来源:https://www.cnblogs.com/pig-brother/p/7282524.html