APT注解处理器从入门到放弃(一)

前言

APT 全称:Annotation Processing Tool,是 Java 提供的一种注解处理器工具,根据注解在编译时自动生成相关代码。在 Android 日常开发中经常会遇到注解处理器的使用,如: ARouter 框架,butterknife 框架,Hit 框架等都使用了 APT 技术。本篇文章先简单介绍基础入门知识。

基础知识

  1. Element:表示注解作用的一个元素,只会在代码编译器存在,表示的类型包括:packet,class,interface,method,成员变量,函数参数,泛型类型等。
  • TypeElement:代表一个类或者接口元素。
  • Filer:用来生成 class 文件的帮助类。
  • Messager:日志输出类,用在调试代码时打印相关日志。
  • Elements:元素工具类,可以更加元素的类型生成相关 class。
  • TypeMirror:元素的类型签名。

常用函数

在日常使用 APT时,经常会用到以下函数。

asType() 返回TypeMirror
getAnnotation(Class annotationType) 传入注解可以获取该元素上的所有注解
getAnnotationMirrors() 获该元素上的注解类型
getEnclosedElements() 获取该元素上的直接子元素
getEnclosingElement() 获取该元素的父元素
getKind() 返回值为ElementKind
getModifiers() 获取修饰该元素的访问修饰符,public,private
Elements.getPackageOf() 获取包名
isSubtype() 判断类是否继承于指定父类

基本使用

创建方法

arduino 复制代码
MethodSpec.methodBuilder("test") //方法名称
          .addParameter(int.class,"age")
          .addModifiers(Modifier.PUBLIC) //增加方法修饰符
          .returns(void.class) //返回值类型
          .build();

创建类

scss 复制代码
TypeSpec.classBuilder("TestDemo") //类名
        .addModifiers(Modifier.PUBLIC,Modifier.FINAL)
        .addMethod(methodSpec)
        .build();

创建接口

arduino 复制代码
TypeSpec.interfaceBuilder("接口名称")

创建枚举

arduino 复制代码
TypeSpec.enumBuilder("枚举名称")

继承、实现接口

获取 class 的 签名

vbnet 复制代码
ClassName.get(String.class) //可以说class,也可以TypeElement

生成文件

scss 复制代码
JavaFile.builder("包名",TypeSpec).build().writeTo(filer);

总结

APT 技术作为一种常用的技术,想要完全掌握必需先从基本 api 的使用开始学习,掌握入门基础才能走的更远。下篇文件将介绍如何注册 APT。

相关推荐
像风一样自由9 分钟前
android native 中的函数动态注册方式总结
android·java·服务器·安卓逆向分析·native函数动态注册·.so文件分析
nono牛14 分钟前
Makefile中打印变量
android
没有了遇见1 小时前
Android 关于RecycleView和ViewPager2去除边缘反馈
android
城东米粉儿1 小时前
android gzip数据压缩 笔记
android
城东米粉儿2 小时前
android 流量优化笔记
android
似霰2 小时前
HIDL Hal 开发笔记10----添加硬件访问服务(Java 层调用 HIDL)
android·framework·hal
佛系打工仔4 小时前
绘制K线第三章:拖拽功能实现
android·前端·ios
我命由我123454 小时前
Android 项目路径包含非 ASCII 字符问题:Your project path contains non-ASCII characters
android·java·java-ee·android studio·android jetpack·android-studio·android runtime
wszy18095 小时前
rn_for_openharmony_空状态与加载状态:别让用户对着白屏发呆
android·javascript·react native·react.js·harmonyos
城东米粉儿5 小时前
JobScheduler 相关笔记
android