这是一个讨论这个问题的问题。
结论是,编写这段代码的方法是创建一个与构造函数参数名称匹配的属性,并由它初始化:
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)
但是,此功能在0.2.0
KotlinPoet 发布时不可用。它已经实现,并且在存储库中对此进行了测试,但您必须等待0.3.0
KotlinPoet 的发布才能使用此功能,该功能应该会在接下来的几天内推出。
此功能可从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)