反射(二):annotation理解
阿新 • • 發佈:2018-12-09
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("今天要下雨"); } } 結果:新聞訊息: 今天要下雨