项目官网地址 github.com/square/java…java
JavaPoet是square提供的一套用于生成.java文件的API,该API可读性强上手快,当项目中须要大量的繁琐重复的代码时,咱们能够在编译器使用JavaPoet生成java文件git
类名 | 做用 |
---|---|
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.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.builder(ClassName type)
AnnotationSpec.builder(Class<?> type)
//设置属性值
.addMember(String name,String format,Object... args)
复制代码
FieldSpec.builder(TypeName type, String name, Modifier... modifiers)
FieldSpec.builder(Type type, String name, Modifier... modifiers)
复制代码
//构造方法
MethodSpec.constructorBuilder()
//生成方法
MethodSpec.methodBuilder(String name)
//添加参数
.addParameter(ParameterSpec parameterSpec)
//返回值
returns(TypeName returnType)
//方法体
addCode()
addStatement()
复制代码
addCode添加多行代码,须要本身处理;和换行 addStatement添加单行,不须要本身添加;和换行github
//生成参数
ParameterSpec.builder(TypeName type, String name, Modifier... modifiers)
ParameterSpec.builder(Type type, String name, Modifier... modifiers)
复制代码
生成的参数,能够经过methodSpecBuilder.addParameter(ParameterSpec spec)加入方法参数中数组
typeName是简单的表示符、其中包括声明类型(ClassName)、数组(ArrayTypeName)、参数化类型(ParameterizedTypeName)、通配符类型(WildcardTypeName)和类型变量(TypeVariableName)。bash
分类 | 生成的类型 | 写法 |
---|---|---|
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,Tui
规则 | 含义 |
---|---|
L | 字面值 如整数 |
S | String |
N | Name 类,接口等 |
T | 变量 |
Download the latest .jar or depend via Maven:spa
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>1.11.1</version>
</dependency>
复制代码
or Gradle:code
compile 'com.squareup:javapoet:1.11.1'
复制代码