我应该如何在 kotlinpoet 的函数中添加 属性
How should I add property within a function in kotlinpoet
我看到 TypeSpec.classBuilder 有 addProperty 函数可以生成下面格式的代码
override val propertyName: PropertyType = PropertyValue
但是当我尝试在 class 的一个函数中添加相同的 属性 定义时,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
}
}
(来自 this 测试库)。
我看到 TypeSpec.classBuilder 有 addProperty 函数可以生成下面格式的代码
override val propertyName: PropertyType = PropertyValue
但是当我尝试在 class 的一个函数中添加相同的 属性 定义时,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
}
}
(来自 this 测试库)。