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