前言
大家多多少少都用过或者看过注解(Annotation),比如最常见@Override、@Deprecated等。近年来一些比较流行的三方框架都使用的注解,像ButterKnife(渐渐被Databinding、ViewBinding取代,已经停止维护)、Dagger、Room等等。那为什么这些大牛都这么热衷于使用注解呢?原因肯定是注解的好处多多了。
注解的优点
- 代码的检查,将一些错误暴露在运行期之前。
- 减少重复的工作,提高工作效率。例如ButterKnife,可以减少我们的findViewById,设置点击事件等。
- 降低代码的耦合。典型的就是Dagger。
- 信息配置,运行时利用反射动态处理。
元注解(meta-annotation)
什么叫元注解,意思就是在JDK中定义好的注解。在JDK1.5中提供了4个元注解
@Target
表示该注解用于哪个位置,例如作用在类、方法等上面,详细的作用范围如下:
- ElementType.TYPE 类、接口(包括注解类型)或枚举声明
- ElementType.FIELD 字段声明
- ElementType.METHOD 方法声明
- ElementType.PARAMETER 方法的参数声明
- ElementType.CONSTRUCTOR 类的构造法声明
- ElementType.LOCAL_VARIABLE 局部变量声明
- ElementType.ANNOTATION_TYPE 注解声明
- ElementType.PACKAGE 包声明
- ElementType.TYPE_PARAMETER JDK1.8新加的,类型参数声明
- ElementType.TYPE_USE JDK1.8新加的,类型使用声明
@Retention
表示注解的生命周期
- RetentionPolicy.SOURCE 源码阶段,在编译时会去除
- RetentionPolicy.CLASS 注解会保存在class文件中&#x