Annotation的一般形式是 :
- public @interface MyAnnotation {
- String value() default "hahaha";
- }
我認爲和它等價的java類爲: Annotation的使用方法和Bean的比較:
- public class MyAnnotation extends java.lang.annotation.Annotation{
- private String value = "hahaha";
- public void setValue(String value){
- this.value = value;
- }
- public String getValue(){
- return value;
- }
- }
- @MyAnnotation(value="hello") //對應Bean的set方法
- Method method = AnnotationTest.class.getMethod("doSomthing", null); //取得被註釋的方法,AnnotationTest.class爲該方法所在的類
- MyRetention mr = method.getAnnotation(MyRetention.class); //取得註釋對象
- String value = mr.value(); //取得value的值,對應Bean的get方法.
- public enum RetentionPolicy {
- SOURCE, // 編譯器處理完Annotation後不存儲在class中
- CLASS, // 編譯器把Annotation存儲在class中,這是默認值
- RUNTIME // 編譯器把Annotation存儲在class中,可以由虛擬機讀取,反射需要
- }
- public enum ElementType {
- TYPE, // 指定適用點爲 class, interface, enum
- FIELD, // 指定適用點爲 field
- METHOD, // 指定適用點爲 method
- PARAMETER, // 指定適用點爲 method 的 parameter
- CONSTRUCTOR, // 指定適用點爲 constructor
- LOCAL_VARIABLE, // 指定使用點爲 局部變量
- ANNOTATION_TYPE, //指定適用點爲 annotation 類型
- PACKAGE // 指定適用點爲 package
- }
- import java.lang.annotation.ElementType;
- import java.lang.annotation.Retention;
- import java.lang.annotation.RetentionPolicy;
- import java.lang.annotation.Target;
- @Documented //這個Annotation可以被寫入javadoc
- @Inherited //這個Annotation 可以被繼承
- @Target({ElementType.CONSTRUCTOR,ElementType.METHOD}) //表示這個Annotation只能用於註釋 構造子和方法
- @Retention(RetentionPolicy.CLASS) //表示這個Annotation存入class但vm不讀取
- public @interface MyAnnotation {
- String value() default "hahaha";
- }
Class、Constructor、Field、Method、Package等都實現了該接口,可以通過這些方法訪問Annotation信息,前提是要訪問的Annotation指定Retention爲RUNTIME.