升级Android lifecycle到2.4.0-alpha03后ViewModelProvider.Factory报错
问题原因
Lifecycle 2.4.0-alpha01及以上版本调整了ViewModelProvider.Factory的接口签名:
- 2.3.1及更早版本的
create方法泛型约束为<T : ViewModel?>,允许返回可空类型 - 2.4.0-alpha01及更高版本的泛型约束修改为
<T : ViewModel>,要求返回非空ViewModel实例
你原有代码的create方法签名和新版本接口要求不匹配,因此触发两个报错。
解决步骤
- 调整
create方法的泛型约束,移除ViewModel后的可空标记? - 补全你原有代码中缺失的第二个
else if分支的右括号(原有代码逻辑存在语法疏漏)
修改后的完整代码如下:
class ViewModelFactory(private val param:String,private val param2: String) : ViewModelProvider.Factory { override fun <T : ViewModel> create(modelClass: Class<T>): T { return if (modelClass.isAssignableFrom(ReviewViewModel::class.java)) { ReviewViewModel(param,param2) as T } else if(modelClass.isAssignableFrom(FoodViewModel::class.java)) { FoodViewModel(param,param2) as T } else { throw IllegalArgumentException("Unknown ViewModel class: ${modelClass.name}") } } }
兼容方案(可选)
如果你需要同时兼容Lifecycle 2.3.x和2.4+版本,可以给方法添加@JvmSuppressWildcards注解规避签名校验冲突;如果确定只使用2.4+版本,直接修改签名即可。
内容的提问来源于stack exchange,提问作者sooyeon
相关产品推荐
相关产品推荐

