Как реализовать Comparable в KotlinPoet?

Представлено Fleshgrinder на GitHub.

Как это можно реализовать 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)

Который генерирует:

package com.fleshgrinder

import kotlin.Any
import kotlin.Comparable

class KotlinPoet : Comparable<Any>

Что бы я хотел иметь:

package com.fleshgrinder

class KotlinPoet : Comparable<KotlinPoet>

1 ответ

Решение

ParameterizedTypeName имеет следующий фабричный метод:

fun get(rawType: ClassName, vararg typeArguments: TypeName)

Вот как вы можете применить его к своему варианту использования:

val className = ClassName("com.fleshgrinder", "KotlinPoet")
val comparable = ParameterizedTypeName.get(Comparable::class.asClassName(), className)
Другие вопросы по тегам