1. 程式人生 > >反射(二):annotation理解

反射(二):annotation理解

1.通過getAnnotation獲取所有的執行時註解

@Deprecated
@SuppressWarnings("student")
class Student implements Serializable {

}

        Class<?> studentClass = Student.class;
        Annotation[] annotations = studentClass.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation);
        }

輸出結果:@java.lang.Deprecated()

2.自定義annotion

@Retention(RetentionPolicy.RUNTIME)
@interface Factory {
     public String value() default "mingi";
    public String key();
}

@Factory(key = "fuzhiwei")
@Deprecated
@SuppressWarnings("student")
class Student implements Serializable {

}

        Class<?> studentClass = Student.class;
        Annotation[] annotations = studentClass.getAnnotations();
        for (Annotation annotation : annotations) {
            System.out.println(annotation);
        }
執行結果:
@com.mingji.Factory(value=mingi, key=fuzhiwei)
@java.lang.Deprecated()

3.獲取指定的annotion的內容

Class<?> studentClass = Student.class;
        Factory annotation = studentClass.getAnnotation(Factory.class);
        System.out.println(annotation.key());
        System.out.println(annotation.value());
執行結果:
fuzhiwei
mingi

4.通過在類中配置annotion的引數來構造物件

@Retention(RetentionPolicy.RUNTIME)
@interface AnnotationFactory {
    String className();
}

@AnnotationFactory(className = "com.mingji.News")
public class Demo {
    public static void main(String[] arg) throws Exception {
        AnnotationFactory an = Demo.class.getAnnotation(AnnotationFactory.class);
        Class<?> cls = Class.forName(an.className());
        Message message = (Message) cls.newInstance();
        message.print("今天要下雨");
    }
}

結果:新聞訊息: 今天要下雨