You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级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方法签名和新版本接口要求不匹配,因此触发两个报错。
解决步骤
  1. 调整create方法的泛型约束,移除ViewModel后的可空标记?
  2. 补全你原有代码中缺失的第二个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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 12:27:07