Как реализовать Comparable в KotlinPoet? - PullRequest
0 голосов
/ 11 мая 2018

Отправлено 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 Ответ

0 голосов
/ 11 мая 2018

ClassName имеет следующий метод расширения:

fun ClassName.parameterizedBy(vararg typeArguments: TypeName)

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

val className = ClassName("com.fleshgrinder", "KotlinPoet")
val comparable = Comparable::class.asClassName().parameterizedBy(className)

Обратите внимание, что из-за Ошибка IDE , вам нужно вручную добавить следующий импорт:

import com.squareup.kotlinpoet.ParameterizedTypeName.Companion.parameterizedBy
...