用KotlinPoet生成数据类

我想用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修饰符添加到构造函数参数?

这是一个讨论这个问题的问题。

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

 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版本中不可用。 它已经被实现,并且在正在通过的存储库中有一个测试 ,但是你必须等待KotlinPoet的0.3.0版本才能使用这个功能,这个功能应该会在下一个几天。

这个特性从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)