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

Android Hilt使用@Provides注入子类时出现UninitializedPropertyAccessException异常

Hilt @Provides注入子类导致UninitializedPropertyAccessException的问题解决

错误原因

你在ModuleProvides的getCar()方法里直接手动实例化ElectricCar()和GasolineCar(),这会导致Hilt无法对这些实例执行成员注入操作。父类Car中的@Inject lateinit var engine依赖没有被Hilt初始化,所以调用car.accel()时会抛出UninitializedPropertyAccessException。

而你的AlternativeCarFactory能正常工作,是因为工厂里的electricCar和gasolineCar是由Hilt注入的实例,Hilt已经完成了它们的成员注入(包括父类的engine)。

正确的@Provides写法

要让Hilt处理子类的依赖注入,你需要在@Provides方法中通过参数获取Hilt管理的ElectricCar和GasolineCar实例,而不是手动new:

@Module
@InstallIn(SingletonComponent::class)
object ModuleProvides {
    @Provides
    fun getCar(
        electricCar: ElectricCar,
        gasolineCar: GasolineCar
    ): Car {
        return if(true) // 你的判断逻辑
             electricCar
        else
            gasolineCar
    }
}

补充说明

  • 因为ElectricCar和GasolineCar都标注了@Singleton且有@Inject构造函数,Hilt会自动为它们创建实例并完成成员注入(包括父类Car中的engine)。
  • 通过参数注入这两个子类后,getCar()返回的实例已经是完全初始化好的,调用car.accel()不会再出现未初始化异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:00:09