这篇看不懂也没关系,等写完“反射系列”之后,在用反射+自定义注解写一个demo案例,再回头看这些文字,应该会感受不同。
2. @Target – 表示支持注解的程序元素的种类,一些可能的值有TYPE, METHOD, CONSTRUCTOR, FIELD等等。如果Target元注解不存在,那么该注解就可以使用在任何程序元素之上。(定义注解的作用目标**作用范围字段、枚举的常量/方法 )
3. @Inherited – 表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。
4. @Retention – 表示注解类型保留时间的长短,它接收RetentionPolicy参数,可能的值有SOURCE, CLASS, 以及RUNTIME。
SOURCE:注解仅存在于源码中,在class字节码文件中不包含;
CLASS:默认的保留策略,注解会在class字节码文件中存在,但运行时无法获得;
RUNTIME:注解会在class字节码文件中存在,在运行时可以通过反射获取到;
5.列子:(看文档)
//如果指定类型的注释存在于此元素上,则返回 true,否则返回 false。if (field.isAnnotationPresent(Annotation.class)){
//如果存在该元素的指定类型的注释,则返回这些注释,否则返回 null。
SqlFieldType sqlFieldType = field.getAnnotation(Annotation.class);
}