首先反射注解,那么保留策略必须是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(); }; }
输出结果
时间: 2024-10-10 05:47:36