参考泛型类型在科特林
问题描述:
下面的类结构:参考泛型类型在科特林
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() }
的通知后<T>
fun
。
Kotlin没有原始类型,所以你需要来为GenericClass
指定一个通用类型。您也可以使用通配符:
fun useFragment(f: GenericClass<*>) {
f.anOperation()
}
在这种情况下,没有区别。
另外,您问题中的继承无效 - GenericClass
是最终的类,不能扩展。您应该将open
修饰符添加到GenericClass
。
您甚至可以将它制作成abstract
,因为它看起来不像应该单独使用。
不错的解释 –