apt编译java_APT-通过JavaPoet生成Java 文件

本文介绍了JavaPoet库,这是一个用于生成.java文件的API,适用于在编译时自动化生成大量重复代码。主要类包括TypeSpec、MethodSpec、ParameterSpec等,用于创建类、方法、参数等。此外,还详细讲解了如何添加修饰符、注解、注释,以及创建各种类型的字段和方法。文章最后提供了引入JavaPoet库的Maven和Gradle依赖方式。
摘要由CSDN通过智能技术生成

简介

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'

复制代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值