Как создать класс с параметром typealias через kotlinpoet - PullRequest
0 голосов
/ 27 января 2020

Я хочу создать определение класса kotlin с typealias.

typealias MyAlias = BigDecimal
class TemplateState(var test: MyAlias) {
}

Есть предложения?

Ответы [ 2 ]

1 голос
/ 27 января 2020

Вы можете найти его в документации :

//create a TypeAlias and store it to use the name later
val typeAlias = TypeAliasSpec.builder("MyAlias", BigDecimal::class).build()
val type = TypeSpec.classBuilder("TemplateState").primaryConstructor(
    FunSpec.constructorBuilder().addParameter(
        //You can use the ClassName class to get the typeAlias type
        ParameterSpec.builder("test", ClassName("", typeAlias.name)).build()
    )
).build()
FileSpec.builder("com.example", "HelloWorld")
    .addTypeAlias(typeAlias)
    .addType(type)
    .build()
0 голосов
/ 28 января 2020

KotlinPoet на самом деле не волнует, представляет ли ClassName typealias или реальный тип. В вашем случае ClassName("", "MyAlias") (при условии, что MyAlias объявлено в пакете по умолчанию) достаточно для использования в качестве типа параметра конструктора. Конечно, вам нужно сгенерировать typealias отдельно, чтобы скомпилировать сгенерированный код.

...