首先不得不限了解下注解
以上是java.lang.annotation包下的元注解的分类
@Documented源码中的解释大概意思是是否记录在javaDoc中
@Inherited源码中大概意思是是否继承该注解类型
@Target注解的作用范围 默认是false
@Retention注解是否会保留
@Target中的注解
- 1.ElementType.CONSTRUCTOR:用于描述构造器
- 2.ElementType.FIELD:用于描述域
- 3.ElementType.LOCAL_VARIABLE:用于描述局部变量
- 4.ElementType.METHOD:用于描述方法
- 5.ElementType.PACKAGE:用于描述包
- 6.ElementType.PARAMETER:用于描述参数
- 7.ElementType.TYPE:用于描述类、接口(包括注解类型) 或enum声明
- @Retention中包括三种
- 1.RetentionPolicy. SOURCE 保留在源文件
- 2.RetentionPolicy.CLASS 保留在class类
- 3.RetentionPolicy.RUNTIME 运行时保留 可以通过反射拿到。。。。。
- 和ButterKinife的源码中是用了.RetentionPolicy.CLASS即编译时
- 但是我这里是用了RetentionPolicy.RUNTIME运行时
然后我们只是发现在activity中就可以使用了
一般是 ButterKnife.bind(this);
那么我们写一个类创造一个这样的方法
可以看出bind时候把this传过去,对于activity来说既是当前的activity
这样我们就可以通过反射拿到类里边的所有成员
findViewById代码
一个精简版的butterKnife就做成了
运行结果如下