给定一个像
interface Builder<R> {
fun build() : R
}
Run Code Online (Sandbox Code Playgroud)
如何生成一个BooBuilder使用kotlinpoet实现此接口的类。
我在文档中找不到创建通用接口(或类)的示例。
我想从什么开始
class BooBuilder(): Builder<Boo> { //...
Run Code Online (Sandbox Code Playgroud)
我明白我应该从
TypeSpec
.classBuilder("BooBuilder")
.addSuperinterface( /* I have no idea what to put here */ )
// add methods
Run Code Online (Sandbox Code Playgroud)
您可以将ParameterizedTypeName作为参数传递给addSuperinterface。要创建ParameterizedTypeName您可以使用KClass<*>.parameterizedBy扩展功能
例
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
val booKClass = Boo::class
val booBuilderType = TypeSpec
.classBuilder("BooBuilder")
.addSuperinterface(Builder::class.parameterizedBy(booKClass))
.addFunction(
FunSpec.builder("build")
.addModifiers(KModifier.OVERRIDE)
.addStatement("TODO()")
.returns(booKClass)
.build()
)
.build()
val kotlinFile = FileSpec.builder("com.example", "BooBuilder")
.addType(booBuilderType)
.build()
kotlinFile.writeTo(System.out)
Run Code Online (Sandbox Code Playgroud)
输出量
package com.example
class BooBuilder : Builder<Boo> {
override fun build(): Boo {
TODO()
}
}
Run Code Online (Sandbox Code Playgroud)