Kotlin强制使用通用替代类型

时间:2018-08-02 09:41:45

标签: android kotlin

我从ViewModelProvider.Factory开始扩展,因此我需要覆盖fun <T : ViewModel?> create(modelClass: Class<T>): T。我想从类外部强制执行此T类型,在初始化工厂时将其传递给类。我的想法是要有这样的东西:

class BaseViewModelFactory<T>(val creator: () -> T) : ViewModelProvider.Factory {
    override fun <T : ViewModel?> create(modelClass: Class<T>): T {
        val gearSearchViewModel: T = creator() as T
        return gearSearchViewModel
    }
}

问题在于,将T中定义的BaseViewModelFactory类型与create函数中定义的类型不同,因此需要使用{{1 }}最后投放。是否有办法避免这种情况,并将外部as T类型强制为内部T函数类型?

1 个答案:

答案 0 :(得分:0)

您不小心在T函数的声明中重新声明了类型参数create。删除<T : ViewModel?>,以便函数中的T引用类定义中声明的T