手写一个精简版ButterKnife

本文详细解析了Java注解的工作原理,包括元注解的分类及其作用,如@Documented、@Inherited、@Target和@Retention的使用场景。特别介绍了不同类型的注解元素,如构造器、域、局部变量等,并探讨了注解的保留策略,以及如何通过反射在运行时获取注解信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先不得不限了解下注解
在这里插入图片描述

以上是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就做成了

在这里插入图片描述
运行结果如下
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值