Android 应用开发对注解的应用达到了淋漓尽致的地步,无论是运行是注解,还是编译时注解,或是标准注解,都被广泛应用。Android Support Library 专门推出注解库Support Annotation,各种开源函数库也应用注解,例如REST网络请求。
注解的定义
注解是java语言的特性之一,它是在源代码插入的标签,这些标签在后面的编译或者运行过程中起到某种作用,每个注解都必须通过注解接口@interface进行声明,接口的方法对应着注解的元素
注解的定义和接口的接口非常像,在interface的前面多了一个@
public @interface TestPerson
{
//name既是这个注解的属性,也是注解的方法,调用name()返回值就是name
String name() default gavin;
}
注意:千万不能把前面的@符号弄掉了,弄掉了就成了接口的定义了,注解接口中的方法没有参数,没有throws语句,也不能泛型。
标准注解
java api 定义的注解我们称之为标准注解
编译相关的注解是给编译器用的,如下:
@Override:相信大家非常熟悉,就是表明这个方法是改写了父类的方法
@Deprecated:表示在新版本的 jdk中已经不建议使用这个方法或者属性
@SuppressWarning:就是屏蔽掉一些警告
Override就是用在方法上的注解,Deprecated是既可以用在方法上面,也可以用在类上面,我们直接看看Override是怎么实现的吧
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface Override {
}
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(value={CONSTRUCTOR, FIELD, LOCAL_VARIABLE, METHOD, PACKAGE, PARAMETER, TYPE})
public @interface Deprecated {
}
我们发现这两个注解在定义的过程中都使用了其他的注解,像Target和Retention这种注解叫做元注解,我们分别看看它们的意思吧
元注解 – 定义和实现注解的注解
@Target注解的功能就是表明你这个注解是用在什么地方的,它的值是一个枚举型
- 1.CONSTRUCTOR:用于描述构造器
- 2.FIELD:用于描述域
- 3.LOCAL_VARIABLE:用于描述局部变量
- 4.METHOD:用于描述方法
- 5.PACKAGE:用于描述包
- 6.PARAMETER:用于描述参数
- 7.TYPE:用于描述类、接口(包括注解类型) 或enum声明
- TYPE_PARAMETER:类型参数
- TYPE_USE:类型用途
Retention注解的功能差不多说明的就是你的注解的生命周期吧,就是什么时候失效,它的值如下
- 1.SOURCE:在源文件中有效(即源文件保留)【源码级注解】
- 2.CLASS:在class文件中有效(即class保留)【编译时注解】
- 3.RUNTIME:在运行时有效(即运行时保留)【运行时注解】
未指定类型,默认是CLASS类型