简介
JavaPoet是square提供的一套用于生成.java文件的API,该API可读性强上手快,当项目中需要大量的繁琐重复的代码时,我们可以在编译器使用JavaPoet生成java文件
重要的类
类名
作用
TypeSpec
用于生成类,接口,枚举
MethodSpec
用于生成方法
ParameterSpec
用于生成参数
AnnotationSpec
用于生成注解
FiedSpec
用于生成成员变量
TypeName
通过包名和类名生成信息类,相当于java代码中的Class类
ParameterizedTypeName
用于生成带有泛型的类信息
JavaFile
控制生成java文件
常用的方法
添加修饰关键字
builder.addModifiers(Modifier... modifier)
复制代码
添加注解
builder.addAnnotations(Iterable annotationSpecs)
builder.addAnnotation(AnnotationSpec annotationSpec)
builder.addAnnotation(ClassName annotation)
builder.addAnnotation(Class> annotation)
复制代码
添加注释
addJavadoc(CodeBlock block)
addJavadoc(String format, Object... args)
复制代码
TypeSpec
创建类,接口,枚举
//创建类
TypeSpec.ClassBuilder(String classFullName)
TypeSpec.ClassBuilder(ClassName className)
//创建接口
TypeSpec.InterfaceBuilder(String classFullName)
TypeSpec.InterfaceBuilder(ClassName className)
//创建枚举
TypeSpec.enumBuilder(String classFullName)
TypeSpec.enumBuilder(ClassName className)
//添加枚举值
.addEnumConstant(String name)
.addEnumConstant(String name, TypeSpec typeSpec)
//创建内部类
TypeSpec.anonymousClassBuilder(CodeBlock typeArguments)
TypeSpec.anonymousClassBuilder(String typeArgumentsFormat, Object... args)
复制代码
类的继承与接口实现
//继承
.superclass(TypeName typeName)
.superclass(Type superclass)
//实现接口
.addSuperinterfaces(Iterable extends TypeName> superinterfaces)
.addSuperinterface(TypeName superinterface)
.addSuperinterface(Type superinterface)
复制代码
AnnotationSpec 生成注解
AnnotationSpec.builder(ClassName type)
AnnotationSpec.builder(Class> type)
//设置属性值
.addMember(String name,String format,Object... args)
复制代码
FieldSpec变量的创建
FieldSpec.builder(TypeName type, String name, Modifier... modifiers)
FieldSpec.builder(Type type, String name, Modifier... modifiers)
复制代码
MethodSpec生成方法
//构造方法
MethodSpec.constructorBuilder()
//生成方法
MethodSpec.methodBuilder(String name)
//添加参数
.addParameter(ParameterSpec parameterSpec)
//返回值
returns(TypeName returnType)
//方法体
addCode()
addStatement()
复制代码
addCode添加多行代码,需要自己处理;和换行
addStatement添加单行,不需要自己添加;和换行
ParameterSpec生成方法
//生成参数
ParameterSpec.builder(TypeName type, String name, Modifier... modifiers)
ParameterSpec.builder(Type type, String name, Modifier... modifiers)
复制代码
生成的参数,可以通过methodSpecBuilder.addParameter(ParameterSpec spec)加入方法参数中
TypeName
typeName是简单的表示符、其中包括声明类型(ClassName)、数组(ArrayTypeName)、参数化类型(ParameterizedTypeName)、通配符类型(WildcardTypeName)和类型变量(TypeVariableName)。
分类
生成的类型
写法
className
int,File
ClassName.get(int.class),ClassName.get("java.io",:"File")
arrayTypeName
int[]
ArrayTypeName.of(int.class)
ParameterizedType
List
ParameterizedTypeName.get(List.class, String.class)
TypeVariableName
T
TypeVariableName.get("T")
WildcardType
? extends String
WildcardTypeName.subtypeOf(String.class)
格式化规则
javapoet提供了一套自定义的字符串格式化规则,常用的有L,S,N,T
规则
含义
L
字面值 如整数
S
String
N
Name 类,接口等
T
变量
项目引入
Download the latest .jar or depend via Maven:
com.squareup
javapoet
1.11.1
复制代码
or Gradle:
compile 'com.squareup:javapoet:1.11.1'
复制代码