使用 KotlinPoet 生成数据 class
Generate data class with KotlinPoet
我想用 KotlinPoet 生成简单的数据class:
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
版本才能使用这个功能,这是应该在接下来的几天内到达。
此功能可从 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)
我想用 KotlinPoet 生成简单的数据class:
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
版本才能使用这个功能,这是应该在接下来的几天内到达。
此功能可从 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)