Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/182.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Kotlin强制执行泛型覆盖类型_Android_Kotlin - Fatal编程技术网

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函数返回的类型,但我认为这种设计方式不允许这样做。除非我扩展了所有这些类,我真的不想这样做。