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

Hilt编译报错:无@Provides注解方法无法提供Mammals的解决咨询

解决Hilt依赖注入编译错误的方案

核心问题分析

编译报错Mammals cannot be provided without an @Provides-annotated method.的根源是:

  • ViewModel中声明的mammals类型错误地写成了限定符注解@Mammals,而非实际要注入的String类型;fish同理,类型写成了限定符注解@Fish。
  • Hilt无法识别注解作为依赖类型,自然找不到对应的提供方法。

具体修复步骤

  1. 修正注入变量的类型
    将ViewModel中mammals和fish的类型从注解改为String,同时保留限定符注解:

    @HiltViewModel
    class AnimalsViewModel @Inject constructor(private val animalRepository: AnimalRepository) : ViewModel() {
    
        @Mammals
        @Inject lateinit var mammals: String // 把Mammals改成String
    
        @Fish
        @Inject lateinit var fish: String // 把Fish改成String
    
        fun getListOfAnimals(): List<String> {
            // 注释或修复未定义的rescue变量
            // val orgs = rescue.getOrganization()
            var m = "type = " + mammals
            var f = "fish = " + fish
    
            return animalRepository.getAnimals()
        }
    }
    
  2. (可选)改用构造函数注入更规范
    Hilt推荐构造函数注入而非字段注入,可调整ViewModel的注入方式:

    @HiltViewModel
    class AnimalsViewModel @Inject constructor(
        private val animalRepository: AnimalRepository,
        @Mammals private val mammals: String,
        @Fish private val fish: String
    ) : ViewModel() {
    
        fun getListOfAnimals(): List<String> {
            var m = "type = " + mammals
            var f = "fish = " + fish
    
            return animalRepository.getAnimals()
        }
    }
    
  3. 修复未定义变量
    代码中rescue.getOrganization()的rescue变量未声明,需补充定义或注释掉该行,避免后续运行错误。

验证修复

修改后重新编译,Hilt会正确识别带@Mammals和@Fish限定符的String依赖,从AnimalsModule中获取对应的实例。

内容的提问来源于stack exchange,提问作者Johann

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:40:54