源码地址:https://github.com/ldy1993/ToolforAS.git
注解的作用:
我们经常看有@Override、@SuppressLint("NewApi")这些字样。这些就是注解。他的本意就是是一个标签。例如我们把他贴着类里面部分成员对象里。然后在这个类的代码里面可以去找到哪些成员变量贴了标签,对贴了标签的对象进行初始化或者其他代码功能的操作
我们先简单举个例子,以理解注解的本质。
第一步,创建注解
我们发现一个有趣的事情是注解的名称@interface,和接口interface好像。其实注解的格式也是接口差不多。只不过注解可以对定义的方法赋值。可能是把这个方法当做了成员变量那样使用。
第二步,使用注解
这里意味着我们需要在代码中使用这个注解的标签。如下
这里有两个细节。
如果在注解创建的时候,只有一个value值。并且名称为value(),那么使用注解就不用特意指明这个value值是多少。如果有两个,需要在使用的时候使用(key=value,...)的模式,
如果不使用default默认值,那么使用注解的时候就一定要指明属性的值。
如下
......
public @interface OnBind {
String value() default "默认值";
String name()
}
......
@OnBind(value="临时值",name="张三")
private String temp;
@OnBind(name="张三")
private String defaultValue;
第三步,处理注解。
上面,我们只是告诉我们的代码哪些成员或者方法需要加载哪些标签。并没有说明加了这些标签的成员对象需要做什么特殊处理。下面我们就需要写代码进行处理。
我们在onCreate中通过field的getAnnotation方法获取到我们注解标签,然后显示他的值。
这样试了没有问题后,我们发现一次只能获取一个标签。我们注解是对整个项目生效的,这样每一个类都需要进行注解处理。非常麻烦。于是我们把它剥离开来。创建一个编译器类。专门用于处理该注解的内容。
首先是在同一个类里面遍历所有的成员。如下,使用蓝色框代替红色框内容。