请参阅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
,因为它看起来不应该被单独使用。