Параметр подкласса типа Котлина - PullRequest
0 голосов
/ 13 декабря 2018

Когда у меня есть этот класс:

abstract class MyAbstractClass<T> {
   abstract fun convert() : T
}

Могу ли я как-то указать, что T должен быть подклассом MyAbstractClass?

Редактировать : abstract class MyAbstractClass<T : MyAbstractClass> не работает, потому что MyAbstractClass в <T : MyAbstractClass> снова потребует параметр типа.

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

Вы можете сделать это следующим образом:

abstract class MyAbstractClass<out T : MyAbstractClass<T>> {
    abstract fun convert() : T
}

class ConcreteClass<T>(val str : String) : MyAbstractClass<ConcreteClass<T>>(){
    override fun convert(): ConcreteClass<T> = this
}

fun main(args: Array<String>) {

    val instance: MyAbstractClass<ConcreteClass<String>> = ConcreteClass("str")
    val converted: ConcreteClass<String> = instance.convert()
}
0 голосов
/ 13 декабря 2018

Может быть, что-то вроде этого:

abstract class MyAbstractClass<T : MyAbstractClass<T>> {
    abstract fun convert(): T
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...