什么是注解?
注解就是相当于把我们写的数据存储起来,之后在某个时间(编译时或者运行时)去调用它。
注解是怎么被解释的?
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
有3个值(源码期间有效RetentionPolicy.SOURCE
,编译有效RetentionPolicy.CLASS
,运行有效RetentionPolicy.RUNTIME
)@Target
说明注解使用的地方@Documented
使用了@Documented
的可以在javadoc中找到@Interited
可继承性的标识,使用了Interited
表示注解里的内容可以被子类继承,比如父类中某个成员使用了上述@From(value),From中的value能给子类使用到
参考文档: