请参阅Kotlin中的通用类型

时间:2017-08-11 08:01:39

标签: generics kotlin

具有以下类结构:

abstract class GenericClass<T: Fragment> {
  protected lateinit var fragment: T

  fun anOperation(){
     //do something
  }
}

class ConcreteA: GenericClass<AFragment> {

}

class ConcreteB: GenericClass<BFragment>{
}

我怎样才能做到这一点?

fun useFragment(f:GenericClass){

   f.anOperation()

}

当我声明useFragment函数时,我得到“One type argument expected for class GenericClass

1 个答案:

答案 0 :(得分:3)

您为方法提供了自己的类型参数:

fun <T> useFragment(f: GenericClass<T>) {
   f.anOperation()
}

请注意<T>之后的fun

Kotlin没有原始类型,因此您需要GenericClass指定通用类型。您还可以使用通配符:

fun useFragment(f: GenericClass<*>) {
   f.anOperation()
}

在这种情况下,没有区别。

此外,您问题中的继承无效 - GenericClass是最终类,无法扩展。您应该将open修饰符添加到GenericClass

您甚至可能希望将其设为abstract,因为它看起来不应该单独使用。