什么是注解?
注解就是相当于把我们写的数据存储起来,之后在某个时间(编译时或者运行时)去调用它。
注解是怎么被解释的?
RetentionPolicy.SOURCE 只在源码有效,用于便于阅读理解。
RetentionPolicy.CLASS 编译生效注解,自定义时候需要注意使用Java Library ,因为你使用Android Library 的时候很多javax里的是不能使用的。
自定义方法:
- 创建一个注解类
- 在
java library中创建一个类继承自AbstractProcessor - 在
java library工程的src/main目录上创建resources文件夹 - 在
resources文件夹中创建META-INF包,在META-INF包中创建services包 - 在
services包下创建javax.annotation.processing.Processor文件 - 在
javax.annotation.processing.Processor文件中写下你继承自AbstractProcessor类的那个子类的全完整路径(com.example.MyProcessor) - 在编译的时候会执行
MyProcessor中process方法
RetentionPolicy.RUNTIME 运行时注解,通过反射调用,自定义方法:
例子学习
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD})
@Documented
@Inherited
public @interface From {
int value() default 1;
boolean canBeNull() default false;
}如上例子是声明一个注解:
@Retention有3个值(源码期间有效RetentionPolicy.SOURCE,编译有效RetentionPolicy.CLASS,运行有效RetentionPolicy.RUNTIME)@Target说明注解使用的地方@Documented使用了@Documented的可以在javadoc中找到@Interited可继承性的标识,使用了Interited表示注解里的内容可以被子类继承,比如父类中某个成员使用了上述@From(value),From中的value能给子类使用到
参考文档: