APT-经过JavaPoet生成Java 文件

项目官网地址 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

建立类,接口,枚举

//建立类
    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添加单行,不须要本身添加;和换行github

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)。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'
复制代码
相关文章
相关标签/搜索