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