Android Kotlin强制执行泛型覆盖类型
我从Android Kotlin强制执行泛型覆盖类型,android,kotlin,Android,Kotlin,我从ViewModelProvider.Factory扩展,因此我需要覆盖fun create(modelClass:Class):T。我希望从类外部强制执行此T类型,在初始化工厂时将其传递给类。我的想法是这样的: class BaseViewModelFactory<T>(val creator: () -> T) : ViewModelProvider.Factory { override fun <T : ViewModel?> create(mode
ViewModelProvider.Factory
扩展,因此我需要覆盖fun create(modelClass:Class):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
}
}
类BaseViewModelFactory(val创建者:()->T):ViewModelProvider.Factory{
重写趣味创建(modelClass:Class):T{
val gearchViewModel:T=creator()作为T
返回GearchViewModel
}
}
问题在于
BaseViewModelFactory
中定义的T
类型被视为与create
函数中定义的类型不同的类型,因此需要在最后将转换为T
。有没有办法避免这种情况,并将外部T
类型强制执行到内部T
函数类型中?您在创建
函数的声明中意外地重新声明了类型参数T
。删除
,使函数中的T
引用类定义中声明的T
。就是这样,这是一个框架类。也许我对此无能为力。类型T实际上是在一个get
函数中定义的,该函数随后调用create
函数。这就是我试图避免的:private val searchViewModel:GearchViewModel由lazy{ViewModelProviders.of(这是BaseViewModelFactory{GearchViewModel(SearchRepository(SearchRemoteDataSource()))创建的)。get(GearSearchViewModel::class.java)}
您可以看到,我需要在get
函数中明确定义类型。我希望它是lambda函数返回的类型,但我认为这种设计方式不允许这样做。除非我扩展了所有这些类,我真的不想这样做。