Android 自定义注解之kapt的全面解析

本文介绍了注解的概念,以及如何自定义注解和注解处理器。通过实例展示了如何利用注解处理器在编译时生成代码,简化ButterKnife类似的视图绑定和点击事件处理。此外,还探讨了注解在提高代码可读性和减少反射性能影响上的优势,并提供了完整的代码示例和项目结构。
  • 什么是注解?

  • 如何自定义注解?

  • 怎么对自定义注解标注的元素(属性,方法等)进行解析?

一、什么是注解?

 个人理解就是对程序的解释,并且具有一定的功能,相比注释只是说明性文字。例如:常见的@ResId、@Nullable 起到编译时规范代码的作用,第三方有名的框架:ButterKnife、ARouter、Retrofit等等都使用了大量的注解,除此之外注解还能让代码更简洁,可读性更强。

二、如何自定义注解 ?

我们以实现ButterKnife的绑定控件为例子讲解:

1、工程目录新建三个依赖

  1. lib-annotation(Java依赖):存放自定义注解
  2. lib-processor  (Java依赖 ):存放注解处理器
  3. bind-core (Android依赖):供外部调用

2、自定义注解

@Retention(RetentionPolicy.SOURCE)
@Target(ElementType.FIELD)
public @interface BindView {
    int value();
    String describe() default "";//多个参数示例,default 指定默认值
}
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface OnClick {
    int[] value();//传递View的id,
}

  • @Retention:指定注解作用时期,包括SOURCE、CLASS、RUNTIME。RUNTIME的作用时期最长
  • @Target:指明该注解作用的代码元素,例如属性、方法、类、接口等
  • value() :默认的字段,给注解携带参数,另外你也可以自定义字段

三、自定义注解处理器(lib-annotation包下),对注解进行解析

     1、   lib-annotation的gradle内容容

plugins {
    id 'java-library'
}

java {
    sourceCompatibility = JavaVersion.VERSION_1_8
    targetCompatibility = JavaVersion.VERSION_1_8
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')

    implementation project(':lib-annotation')
    //用于自动为 JAVA Processor 生成 META-INF 信息。
    implementation 'com.google.auto.service:auto-service:1.0-rc6'
    annotationProcessor 'com.google.auto.service:auto-service:1.0-rc6'
    //快速生成.java文件的库
    implementation 'com.squareup:javapoet:1.13.0'
}

2、创建BindingProcessor 继承自AbstractProcessor,重写主要的三个方法

  •  getSupportedSourceVersion():设置版本
  • getSupportedAnnotationTypes():设置支持的注解
    set集合
  • process(Set<? extends TypeElement> annotations, RoundEnvironment roundEnv):主要的注解元素解析方法

                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值