手写一个精简版ButterKnife

首先不得不限了解下注解
手写一个精简版ButterKnife_第1张图片

以上是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运行时
    手写一个精简版ButterKnife_第2张图片
    然后我们只是发现在activity中就可以使用了
    手写一个精简版ButterKnife_第3张图片
    一般是 ButterKnife.bind(this);
    那么我们写一个类创造一个这样的方法
    可以看出bind时候把this传过去,对于activity来说既是当前的activity
    这样我们就可以通过反射拿到类里边的所有成员

手写一个精简版ButterKnife_第4张图片
findViewById代码

手写一个精简版ButterKnife_第5张图片
一个精简版的butterKnife就做成了

手写一个精简版ButterKnife_第6张图片
运行结果如下
手写一个精简版ButterKnife_第7张图片

你可能感兴趣的:(手写一个精简版ButterKnife)