注解(Annotation):是元数据的一种形式,能够添加到Java源代码,Java中的类、方法、变量、参数、包都可以被注解。注解对他们所注解的代码没有直接的影响。 注解的使用可以简化代码,提高开发效率。 在Android中,用到注解的开源库有:Retrofit、ButterKnife、Dagger。
标准Annotation是指Java自带的几个Annotation:
@Override、@Deprecated、@SuppressWarnings
元Annotation是指用来定义Annotation的Annotation:
@Documented:保存到Javadoc文档中。
@Retention:保留时间,可选值SOURCE(源码)、CLASS(编译时)、RUNTIME(运行时);默认为CLASS,SOURCE大都为Mark Annotation,这类Annotation大都用来校验,如Override。
@Target:表示该注解可以修饰那些程序元素,值为:TYPE、METHOD、CONSTRUCTOR、FIELD、PARAMETER等,未标记则表示可修饰所有。
@Inherited:是否可以被继承,默认为false。
根据自己需要进行自定义的Annotation,定义时需要用到上面的元Annotation。

语法说明:
1. 通过@interface定义,注解类名即为注解名;
2. 注解配置参数为注解类的方法名:
(1)所有的方法没有方法体,没有参数,没有修饰符,不允许抛出异常;
(2)方法的返回值只能是基本类型、String、Class、enum、Annotation、及他们的一维数组;
(3)若只有一个默认属性,可直接用value()函数;
(4)若一个属性都没有的表示该Annotation为标记注解(Mark Annotation)如@Override;
(5)可以加default表示默认值。

(1)运行时Annotation指@Retention为RUNTIME的Annotation。
(2)常用API

(3)解析示例:

运行结果:

(1)编译时Annotation指@Retention为CLASS的Annotation,由编译器自动解析。
(2)自定义类继承自AbstractProcessor,并重写其中的process函数。
示例代码:将上面的Request的@Retention改为CLASS:
