我应该如何在kotlinpoet中的函数中添加属性

时间:2018-04-28 14:42:30

标签: kotlin kotlinpoet

我看到TypeSpec.classBuilder有addProperty函数,可以生成以下格式的代码

override val propertyName: PropertyType = PropertyValue

但是当我尝试在类的一个函数中添加相同的属性定义时,FunSpec.builder没有这样的addProperty。我应该如何在一个函数中添加属性?感谢。

1 个答案:

答案 0 :(得分:1)

您无法直接在函数内添加属性,但可以添加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测试。)