我想用KotlinPoet生成简单的数据类:

data class User(val id: Int)

我这样做:
val builder = KotlinFile.builder("", "Foo")
val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA)
val ctor = FunSpec.constructorBuilder()
ctor.addParameter("id", Int::class)
classBuilder.primaryConstructor(ctor.build())
builder.addType(classBuilder.build())
builder.build().writeTo(System.out)

但是我得到的是:
data class User(id: Int) {
}

如何在构造函数参数中添加val修饰符?

最佳答案

这是讨论此问题的issue

结论是,编写此代码的方法是创建一个与构造函数参数名称匹配的属性,并由其初始化:

KotlinFile.builder("", "Foo")
        .addType(TypeSpec.classBuilder("User")
                .addModifiers(KModifier.DATA)
                .primaryConstructor(FunSpec.constructorBuilder()
                        .addParameter("id", Int::class)
                        .build())
                .addProperty(PropertySpec.builder("id", Int::class)
                        .initializer("id")
                        .build())
                .build()
        )
        .build()
        .writeTo(System.out)

但是,此功能自KotlinPoet的0.2.0版本开始不可用。它已经实现,并且正在传递的存储库中为此有一个test,但是您必须等待KotlinPoet的0.3.0版本能够使用此功能,该功能将在 future 几天内发布。 。

0.3.0 现已提供此功能。

前面的代码具有与您的原始样式匹配的其他格式:
val builder = KotlinFile.builder("", "Foo")
val classBuilder = TypeSpec.classBuilder("User").addModifiers(KModifier.DATA)

val ctor = FunSpec.constructorBuilder()
ctor.addParameter("id", Int::class)
classBuilder.primaryConstructor(ctor.build())

val idProperty = PropertySpec.builder("id", Int::class).initializer("id").build()
classBuilder.addProperty(idProperty)

builder.addType(classBuilder.build())
builder.build().writeTo(System.out)

关于kotlin - 使用KotlinPoet生成数据类,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44483831/

10-12 02:10