Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Generics 的Kotlin类型参数子类_Generics_Kotlin - Fatal编程技术网

Generics 的Kotlin类型参数子类

Generics 的Kotlin类型参数子类,generics,kotlin,Generics,Kotlin,当我上这门课时: abstract class MyAbstractClass<T> { abstract fun convert() : T } 抽象类MyAbstractClass{ 抽象趣味转换():T } 我可以指定T应该是MyAbstractClass的子类吗 Edit:抽象类MyAbstractClass不起作用,因为中的MyAbstractClass将再次需要类型参数 可能是这样的: abstract class MyAbstractClass<T :

当我上这门课时:

abstract class MyAbstractClass<T> {
   abstract fun convert() : T
}
抽象类MyAbstractClass{
抽象趣味转换():T
}
我可以指定
T
应该是
MyAbstractClass
的子类吗


Edit
抽象类MyAbstractClass
不起作用,因为
中的
MyAbstractClass
将再次需要类型参数

可能是这样的:

abstract class MyAbstractClass<T : MyAbstractClass<T>> {
    abstract fun convert(): T
}
抽象类MyAbstractClass{
抽象趣味转换():T
}

您可以通过以下方法完成:

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()
}
抽象类MyAbstractClass{
抽象趣味转换():T
}
类ConcreteClass(val str:String):MyAbstractClass(){
override fun convert():ConcreteClass=此
}
趣味主线(args:Array){
val实例:MyAbstractClass=ConcreteClass(“str”)
val converted:ConcreteClass=instance.convert()
}

走这条路线通常有一些原因,例如,请参见。有一个名字很常见:。@AlexeyRomanov谢谢你的澄清,我已经相应地编辑了我的答案。