項目官網地址 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'
複製代碼