1、先了解如下4個元註解java
@Documented 具體來講是生成說明文檔時把類的解釋添加進去。 @Inherited 容許子類繼承父類中的註解 @Target 表示該註解用於什麼地方,可能的值在枚舉類 ElemenetType 中 public enum ElementType { TYPE, //給類(型)註解 FIELD, //給字段註解,不要忘了,字段能夠是對象 METHOD, //給方法註解 PARAMETER, //給參數註解 CONSTRUCTOR, //給構造方法註解 LOCAL_VARIABLE, //給局部變量註解 ANNOTATION_TYPE,//給註解註解(這貌似把本身不當類來看) PACKAGE, //給包註解 TYPE_PARAMETER, //不知道,等知道了我再寫在這裏 TYPE_USE //這個也不知道 } @Retention 表示在什麼級別保存該註解信息。可選的參數值在枚舉類型 RetentionPolicy 中 public enum RetentionPolicy { SOURCE, //源碼狀態運行, CLASS, //編譯類文件時運行 RUNTIME //運行時運行 }
2、再看一個Demothis
註解定義code
import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target(value = { ElementType.FIELD }) @Retention(RetentionPolicy.RUNTIME) public @interface UserAnnotation { public int id() default 0; public String name() default ""; public int age() default 18; public String gender() default "M"; }
public class User { int id; String name; int age; String gender; public User(int id, String name, int age, String gender) { this.id = id; this.name = name; this.age = age; this.gender = gender; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getGender() { return gender; } public void setGender(String gender) { this.gender = gender; } }
import java.lang.annotation.ElementType; import java.lang.annotation.Target; import java.lang.reflect.Field; public class TestMain { @UserAnnotation(age = 20, gender = "F", id = 2014, name = "zhangsan")//註解的使用 public Object obj; public static void main(String[] args) throws Exception { Field objField = TestMain.class.getField("obj"); UserAnnotation ua = objField.getAnnotation(UserAnnotation.class);//獲得註解,起到了標記的做用 System.out.println(ua.age() + "," + ua.gender() + "," + ua.id() + "," + ua.name()); //***進一步操做的話,假設Object要指向一個User類,那麼能夠講註解的值給他 TestMain tm = new TestMain(); objField.set(tm, new User(ua.age(), ua.gender(), ua.id(), ua.name())); //不錯吧,將本身的信息送給obj,起到了附加信息的做用 //-----------請自由遐想吧~~,下面來講說註解怎麼能得到註解本身的註解------------- Target t = ua.annotationType().getAnnotation(Target.class); ElementType[] values = t.value(); //~~~~~~~~~~~~~~完了,再一次自由遐想吧~~~~~~~~~~~~~~ String words="瘋狂"; System.out.println(words); } }