我想用KotlinPoet生成简单的数据类:
data class User(val id: Int)
Run Code Online (Sandbox Code Playgroud)
我这样做:
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)
Run Code Online (Sandbox Code Playgroud)
但是我得到的是:
data class User(id: Int) {
}
Run Code Online (Sandbox Code Playgroud)
如何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)
Run Code Online (Sandbox Code Playgroud)
但是,此功能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)
Run Code Online (Sandbox Code Playgroud)