此为个人学习笔记,内容可能有些混乱,仅供参考。
1、 自带注解
大致可分为三类:
a、编写文档:通过代码里标识的元数据生成文档。
b、代码分析:通过代码里标识的元数据对代码进行分析。
c、编译检查:通过代码里标识的元数据让编译器能实现基本的编译检查。
如
@author
@Deprecated
@ SuppressWarnings ,其参数有:
deprecation,使用了过时的类方法时的警告
unchecked,执行了未检查的转换时的警告
fallthrough,当 Switch 程序块直接通往下一种情况而没有 Break 时的警告
path,在类路径、源文件路径等中有不存在的路径时的警告
serial,当在可序列化的类上缺少 serialVersionUID 定义时的警告
finally ,任何 finally 子句不能正常完成时的警告
all,关于以上所有情况的警告
@ Target({TYPE, FIELD, METHOD, PARAMETER, CONSTRUCTOR, LOCAL_VARIABLE})
@ Retention ( RetentionPolicy .SOURCE)
/**
可以在编译时选择代码里的注释是否叧存在于源代码级,或者它也能在class文件中出现
*/
@ Target({TYPE,FIELD, METHOD ,PARAMETER,CONSTRUCTOR,LOCAL_VARIABLE})
@ Retention(RetentionPolicy.SOURCE)
public @interface SuppressWarnings {
String[] value();
}
2、 自定义注解
@Target ({ElementType. METHOD ,ElementType. FIELD })
@Retention (RetentionPolicy. RUNTIME )
public @interface XAnnotation {
String[] vaStrings();
int level() default 1;
}
Enum 一般用来表示 一组相同类型 的 常量 。
3、 ElementType
Java代码
package java.lang.annotation;
public enum ElementType {
TYPE, // 用于类,接口,枚举但不能是注释
FIELD, // 字段上,包括枚举值
METHOD, // 方法,不包括构造方法
PARAMETER, // 方法的参数
CONSTRUCTOR, //构造方法
LOCAL_VARIABLE, // 本地变量
ANNOTATION_TYPE, // 注释类型
PACKAGE // Java包
}
4、RetentionPolicy枚举:
编译器的处理有三种策略:
将注释保留在编译后的类文件中,并在第一次加载类时读取它。
将注释保留在编译后的类文件中,但是在运行时忽略它。
按照规定使用注释,但是并不将它保留到编译后的类文件中。
Java代码
package java.lang.annotation;
public enum RetentionPolicy {
SOURCE, // 此类型会被编译器丢弃
CLASS, // 此类型注释会保留在class文件中,但JVM会忽略它
RUNTIME // 此类型注释会保留在class文件中,JVM会读取它
}
5、其它
@Documented 文档化功能
使用此注解时必须设置RetentionPolicy为RUNTIME
@Inherited 让它允许继承,可作用到子类
6、读取注解信息
伪代码:
Class c; //Class对象,可通过Class.forName( “ 类全名 ” )得到
Method []methods=c.getDeclaredMethods();//获取类申明的所有方法
//迭代方法
Annotation[] annotations = method.getDeclaredAnnotations();
//获取在某个方法上所有注解
for(Annotation an:annotations){
}