kotlin - 我应该如何在 kotlinpoet 的函数中添加属性
问题描述
我看到 TypeSpec.classBuilder 有 addProperty 函数,可以生成以下格式的代码
override val propertyName: PropertyType = PropertyValue
但是当我尝试在类的一个函数中添加相同的属性定义时,FunSpec.builder 没有这样的 addProperty。我应该如何在一个函数中添加属性?谢谢。
解决方案
您不能直接在函数内添加属性,但是可以添加CodeBlock
片段:
TypeSpec.classBuilder("Taco")
.addFunction(FunSpec.builder("shell")
.addCode(CodeBlock.of("%L",
PropertySpec.builder("taco1", String::class.asTypeName())
.initializer("%S", "Taco!").build()))
.addCode(CodeBlock.of("%L",
PropertySpec.builder("taco2", String::class.asTypeName().asNullable())
.initializer("null")
.build()))
.addCode(CodeBlock.of("%L",
PropertySpec.builder("taco3", String::class.asTypeName(), KModifier.LATEINIT)
.mutable(true)
.build()))
.build())
.build()
这会生成以下代码:
import kotlin.String
class Taco {
fun shell() {
val taco1: String = "Taco!"
val taco2: String? = null
lateinit var taco3: String
}
}
(来自图书馆的这个测试)。
推荐阅读
- pointers - 我如何找出有关无法运行的已编译 ELF 64 位 LSB 可执行文件(无效指针)的信息(它的作用和方式)?
- netsuite - NetSutie 将图像添加到登录页面
- angular - Angular 使用基于移动或桌面的不同视图模板
- flutter - 如何将 Widget 放置在 SingleChildScrollView 的底部?
- mysql - 如何将 Prisma/GraphQL 连接到现有的 MySQL 数据库(特别是 WordPress)?
- amazon-web-services - kubectl aws集群中资源分配不足
- java - 比较两个列表时发生奇怪的事情(groovy)
- c# - 处置时 Xamarin Android 组件崩溃
- laravel - Laravel:构建我自己的对话系统
- types - 如何从联合类型中解开泛型类型别名,从而使类型别名更具体?