如何在 KotlinPoet 中实现 Comparable?
How to implement Comparable in KotlinPoet?
由 Fleshgrinder on GitHub 提交。
如何为当前正在生成的 class 实施 Comparable
?
有ParameterizedTypeName.get(Comparable::class, ?)
方法,但不清楚第二个参数如何传递。生成 class 时唯一可用的是它的 ClassName
。
最小示例:
FileSpec.builder("com.fleshgrinder", "KotlinPoet").apply {
val className = ClassName("com.fleshgrinder", "KotlinPoet")
addType(TypeSpec.classBuilder(className).apply {
addSuperinterface(ParameterizedTypeName.get(Comparable::class, Any::class))
}.build())
}.build().writeTo(System.out)
生成:
package com.fleshgrinder
import kotlin.Any
import kotlin.Comparable
class KotlinPoet : Comparable<Any>
我想要的:
package com.fleshgrinder
class KotlinPoet : Comparable<KotlinPoet>
ClassName
有如下扩展方法:
fun ClassName.parameterizedBy(vararg typeArguments: TypeName)
以下是如何将其应用于您的用例:
val className = ClassName("com.fleshgrinder", "KotlinPoet")
val comparable = Comparable::class.asClassName().parameterizedBy(className)
请注意,由于 IDE bug 您需要手动添加以下导入:
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
由 Fleshgrinder on GitHub 提交。
如何为当前正在生成的 class 实施 Comparable
?
有ParameterizedTypeName.get(Comparable::class, ?)
方法,但不清楚第二个参数如何传递。生成 class 时唯一可用的是它的 ClassName
。
最小示例:
FileSpec.builder("com.fleshgrinder", "KotlinPoet").apply {
val className = ClassName("com.fleshgrinder", "KotlinPoet")
addType(TypeSpec.classBuilder(className).apply {
addSuperinterface(ParameterizedTypeName.get(Comparable::class, Any::class))
}.build())
}.build().writeTo(System.out)
生成:
package com.fleshgrinder
import kotlin.Any
import kotlin.Comparable
class KotlinPoet : Comparable<Any>
我想要的:
package com.fleshgrinder
class KotlinPoet : Comparable<KotlinPoet>
ClassName
有如下扩展方法:
fun ClassName.parameterizedBy(vararg typeArguments: TypeName)
以下是如何将其应用于您的用例:
val className = ClassName("com.fleshgrinder", "KotlinPoet")
val comparable = Comparable::class.asClassName().parameterizedBy(className)
请注意,由于 IDE bug 您需要手动添加以下导入:
import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy