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。

相关推荐
爱装代码的小瓶子1 小时前
【C++与Linux基础】进程间通讯方式:匿名管道
android·c++·后端
兴趣使然HX1 小时前
Android绘帧流程解析
android
JMchen1232 小时前
Android UDP编程:实现高效实时通信的全面指南
android·经验分享·网络协议·udp·kotlin
黄林晴2 小时前
Android 17 再曝猛料:通知栏和快捷设置终于分家了,这操作等了十年
android
有位神秘人3 小时前
Android获取设备中本地音频
android·音视频
JMchen1233 小时前
Android网络安全实战:从HTTPS到双向认证
android·经验分享·网络协议·安全·web安全·https·kotlin
CS创新实验室3 小时前
Pandas 3 的新功能
android·ide·pandas
ujainu3 小时前
护眼又美观:Flutter + OpenHarmony 鸿蒙记事本一键切换夜间模式(四)
android·flutter·harmonyos
三少爷的鞋3 小时前
为什么我不在 Android ViewModel 中直接处理异常?
android
草莓熊Lotso4 小时前
Linux 文件描述符与重定向实战:从原理到 minishell 实现
android·linux·运维·服务器·数据库·c++·人工智能