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谢谢你的澄清,我已经相应地编辑了我的答案。