代码之家  ›  专栏  ›  技术社区  ›  fweigl

的kotlin类型参数子类

  •  1
  • fweigl  · 技术社区  · 7 年前

    当我上这堂课时:

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

    我能说明一下吗 T 应该是 MyAbstractClass ?

    编辑 : abstract class MyAbstractClass<T : MyAbstractClass> 不起作用,因为 我的抽象类 在里面 <T : MyAbstractClass> 将再次需要类型参数。

    2 回复  |  直到 7 年前
        1
  •  1
  •   anber    7 年前

    可能是这样的:

    abstract class MyAbstractClass<T : MyAbstractClass<T>> {
        abstract fun convert(): T
    }
    
        2
  •  1
  •   FilipRistic    7 年前

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

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