首先反射注解,那么保留策略必須是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(); }; }
輸出結果