如何在 KotlinPoet 中实现 Comparable?

Ego*_*gor 0 kotlin kotlinpoet

FleshgrinderGitHub 上提交。

如何为Comparable当前正在生成的类实现?

ParameterizedTypeName.get(Comparable::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)
Run Code Online (Sandbox Code Playgroud)

产生:

package com.fleshgrinder

import kotlin.Any
import kotlin.Comparable

class KotlinPoet : Comparable<Any>
Run Code Online (Sandbox Code Playgroud)

我想要什么:

package com.fleshgrinder

class KotlinPoet : Comparable<KotlinPoet>
Run Code Online (Sandbox Code Playgroud)

Ego*_*gor 6

ClassName 有以下扩展方法:

fun ClassName.parameterizedBy(vararg typeArguments: TypeName)
Run Code Online (Sandbox Code Playgroud)

以下是如何将其应用于您的用例:

val className = ClassName("com.fleshgrinder", "KotlinPoet")
val comparable = Comparable::class.asClassName().parameterizedBy(className)
Run Code Online (Sandbox Code Playgroud)

请注意,由于IDE 错误,您需要手动添加以下导入:

import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
Run Code Online (Sandbox Code Playgroud)