Как мне добавить свойство внутри функции в kotlinpoet - PullRequest
0 голосов
/ 28 апреля 2018

Я видел, что TypeSpec.classBuilder имеет функцию addProperty, которая может генерировать код ниже

override val propertyName: PropertyType = PropertyValue

Но когда я попытался добавить одно и то же определение свойства в одну функцию класса, для FunSpec.builder такого addProperty не было. Как добавить свойства в одну функцию? Спасибо.

1 Ответ

0 голосов
/ 28 апреля 2018

Вы не можете добавлять свойства внутри функции напрямую, однако вы можете добавить 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
    }
}

это тест библиотеки).

...