项目官网地址 github.com/square/java…
简介
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<AnnotationSpec> 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:
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>1.11.1</version>
</dependency>
or Gradle:
compile 'com.squareup:javapoet:1.11.1'