参考泛型类型在科特林

参考泛型类型在科特林

问题描述:

下面的类结构:参考泛型类型在科特林

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

+0

不错的解释 –