具有以下类结构:
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
”
答案 0 :(得分:3)
您为方法提供了自己的类型参数:
fun <T> useFragment(f: GenericClass<T>) { f.anOperation() }
请注意<T>
之后的fun
。
Kotlin没有原始类型,因此您需要为GenericClass
指定通用类型。您还可以使用通配符:
fun useFragment(f: GenericClass<*>) {
f.anOperation()
}
在这种情况下,没有区别。
此外,您问题中的继承无效 - GenericClass
是最终类,无法扩展。您应该将open
修饰符添加到GenericClass
。
您甚至可能希望将其设为abstract
,因为它看起来不应该单独使用。