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); } }