当我上这堂课时:
abstract class MyAbstractClass<T> {
abstract fun convert() : T
}
我可以以某种方式指定T
是MyAbstractClass
的子类吗?
编辑:abstract class MyAbstractClass<T : MyAbstractClass>
不起作用,因为MyAbstractClass
中的<T : MyAbstractClass>
将再次需要type参数。
答案 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()
}