Kotlin类型参数的子类

时间:2018-12-13 15:15:11

标签: generics kotlin

当我上这堂课时:

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

我可以以某种方式指定TMyAbstractClass的子类吗?

编辑abstract class MyAbstractClass<T : MyAbstractClass>不起作用,因为MyAbstractClass中的<T : MyAbstractClass>将再次需要type参数。

2 个答案:

答案 0 :(得分:1)

也许是这样的:

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

答案 1 :(得分:1)

您可以通过以下方法做到这一点:

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()
}