注解(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: