HiltViewModel编译报错:类应包含恰好一个@Inject或@AssistedInject注解的构造函数
HiltViewModel编译报错:类应包含恰好一个@Inject或@AssistedInject注解的构造函数
嘿,我之前也踩过这个坑!明明代码看起来完全符合要求,却报这个错,真的挺让人困惑的。咱们来一步步排查可能的问题:
首先先看你给出的代码:
@HiltViewModel class SplashViewModel @Inject constructor() : ViewModel() { }
从代码本身来看,确实是符合HiltViewModel的要求——只有一个被@Inject注解的构造函数,所以问题大概率出在配置或者缓存上。
下面是几个我亲测有效的排查方向:
确认Application类的Hilt注解:Hilt需要一个标注了
@HiltAndroidApp的Application类作为依赖注入的入口,如果没加这个注解,注解处理器会出现异常。你可以检查下你的Application类是不是像这样:@HiltAndroidApp class YourApp : Application() { // 这里可以写自定义初始化逻辑 }别忘了还要在AndroidManifest.xml里指定这个Application类哦。
检查Hilt依赖和插件版本一致性:Hilt的gradle插件和库依赖版本必须完全匹配,版本不兼容很容易导致各种奇怪的注解处理错误。比如如果你的插件版本是2.48,那
hilt-android、hilt-viewmodel这些依赖的版本也得是2.48。清理缓存并重建项目:Android Studio的注解处理器缓存有时候会抽风,导致明明代码没问题却报错。你可以试试:
- 点击菜单栏的
Build->Clean Project - 然后
Build->Rebuild Project - 如果还不行,就
File->Invalidate Caches...,勾选选项后重启AS
- 点击菜单栏的
确认没有多余的构造函数:虽然你贴的代码里只有一个构造函数,但如果之前不小心写了重载构造函数没删掉,哪怕是注释掉的,有时候也会影响注解处理器(不过这个情况比较少见),可以再仔细检查下类里的构造函数。
按照上面的步骤排查下来,应该就能解决这个报错了!
备注:内容来源于stack exchange,提问作者Roy Welles
相关产品推荐
相关产品推荐

