kotlin 1.5 將型別推斷警告(存在于 1.4 中)更改為錯誤。無論如何要忽略1.5中的錯誤?目前,我需要降級到 1.4 才能編譯代碼。
“型別推斷失敗。型別引數 K 的值應該在輸入型別(引數型別、接收器型別或預期型別)中提及。嘗試明確指定它。”
--> providerMap[modelClass]
class ViewModelFactory @Inject constructor(private val providerMap: MutableMap<Class<out AbsViewModel>, Provider<AbsViewModel>>) : ViewModelProvider.Factory {
@Suppress("TYPE_INFERENCE_ONLY_INPUT_TYPES_WARNING", "UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
(providerMap[modelClass]?.get() as? T)?.let { return it }
throw Exception("Could not find view model for ${modelClass.canonicalName}")
}
}
uj5u.com熱心網友回復:
class ViewModelFactory @Inject constructor(
private val providerMap: MutableMap<Class<out AbsViewModel>,
Provider<AbsViewModel>>) : ViewModelProvider.Factory {
@Suppress("UNCHECKED_CAST")
override fun <T : ViewModel> create(modelClass: Class<T>): T {
(providerMap[modelClass as Class<out AbsViewModel>]?.get() as? T)?.let { return it }
throw Exception("Could not find view model for ${modelClass.canonicalName}")
}
}
uj5u.com熱心網友回復:
要么將 Map 鍵 Class 的輸入型別設為通配符:
class ViewModelFactory @Inject constructor(
private val providerMap: MutableMap<Class<*>,
Provider<AbsViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
(providerMap[modelClass]?.get() as? T)?.let { return it }
throw Exception("Could not find view model for ${modelClass.canonicalName}")
}
}
或者,如果您更喜歡在建構式中強制執行型別,請轉換鍵:
class ViewModelFactory @Inject constructor(
private val providerMap: MutableMap<Class<out AbsViewModel>,
Provider<AbsViewModel>>
) : ViewModelProvider.Factory {
override fun <T : ViewModel> create(modelClass: Class<T>): T {
@Suppress("UNCHECKED_CAST")
(providerMap[modelClass as Class<AbsViewModel>]?.get() as? T)?.let { return it }
throw Exception("Could not find view model for ${modelClass.canonicalName}")
}
}
無論哪種方式,您都可以使用?:代替?.let:
return providerMap[modelClass]?.get() as? T
?: error("Could not find view model for ${modelClass.canonicalName}")
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/312852.html
