目录
一、简介
squareup开发一套动态生成java代码的框架。
// 依赖链接
implementation 'com.squareup:javapoet:1.11.1'
二、相关资料
https://segmentfault.com/a/1190000021177287
https://blog.csdn.net/wcs542882916/article/details/83117230(十分详细)
https://blog.csdn.net/l540675759/article/details/82931785
https://blog.csdn.net/alex_xfboy/article/details/88253799(不使用poet生成java代码的率直与痛苦)
https://www.jianshu.com/p/4c0fbe5b27a2
https://github.com/zhouphenix/Docs/blob/master/JavaPoet%E4%BD%BF%E7%94%A8%E8%AF%A6%E8%A7%A3.md(github上整理的poet详细语法)
https://blog.csdn.net/io_field/article/details/89355941
三、语法
1.占位
$L: 取变量字面量值替换之
假如你传递是字符串,生成的java代码会去掉字符串两端的引号。
$S:表示取变量字面量值加双引号后替换之
$T:表示类型,在生成代码时自动去import
类型。
如何关联当前环境不存在的类:通过ClassName.get(包名,类名)
$N:用于关联声明,如关联某个方法名。
2.创建
一般简单类型可以直接写,复杂类型可以通过对应的build构建。
1)创建类
一般类:
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC, Modifier.FINAL)
.addMethod(main)
.build();
接口:
TypeSpec.interfaceBuilder("HelloWorld")
接口方法必须是PUBLIC ABSTRACT
,接口属性必须是PUBLIC STATIC FINAL
。
2)创建类文件
JavaFile javaFile = JavaFile.builder("com.example.helloworld", helloWorld)
.build();
3)创建方法
一般方法:
MethodSpec main = MethodSpec.methodBuilder("main")
.addModifiers(Modifier.PUBLIC, Modifier.STATIC)
.returns(void.class)
.addParameter(String[].class, "args")
.addStatement("$T.out.println($S)", System.class, "Hello, JavaPoet!")
.build();
构造方法:
MethodSpec.constructorBuilder()
参数:
在方法或构造函数上声明参数时,可以使用ParameterSpec.builder()
或MethodSpec
的APIaddParameter()
:
ParameterSpec android = ParameterSpec.builder(String.class, "android")
.addModifiers(Modifier.FINAL)
.build();
MethodSpec welcomeOverlords = MethodSpec.methodBuilder("welcomeOverlords")
.addParameter(android)
.addParameter(String.class, "robot", Modifier.FINAL)
.build();
4)添加属性
FieldSpec android = FieldSpec.builder(String.class, "android")
.addModifiers(Modifier.PRIVATE, Modifier.FINAL)
.build();
TypeSpec helloWorld = TypeSpec.classBuilder("HelloWorld")
.addModifiers(Modifier.PUBLIC)
.addField(android)
.addField(String.class, "robot", Modifier.PRIVATE, Modifier.FINAL)
.build();
5)枚举
TypeSpec.enumBuilder("Roshambo")
6)匿名内部类
TypeSpec.anonymousClassBuilder
7)注解
为方法添加注解:
MethodSpec.methodBuilder("toString")
.addAnnotation(Override.class)
使用AnnotationSpec.builder()给注解设置属性:
MethodSpec logRecord = MethodSpec.methodBuilder("recordEvent")
.addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT)
.addAnnotation(AnnotationSpec.builder(Headers.class)
.addMember("accept", "$S", "application/json; charset=utf-8")
.addMember("userAgent", "$S", "Square Cash")
.build())
.addParameter(LogRecord.class, "logRecord")
.returns(LogReceipt.class)
.build();
8)文档
属性,方法和类型能使用Javadoc文档化:
0 条评论