请参阅Kotlin中的Generic类型

具有以下课程结构:

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

你给这个方法自己的类型参数:

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

fun之后注意<T>

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

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

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

另外,你的问题中的继承是无效的 – GenericClass是一个最终的类,不能扩展。 您应该将open修改器添加到GenericClass

你甚至可能想把它abstract ,因为它看起来不应该被单独使用。