Hilt 提供依赖实例时,报了Types may only contain one @Inject constructor

Posted microhex

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hilt 提供依赖实例时,报了Types may only contain one @Inject constructor相关的知识,希望对你有一定的参考价值。

项目场景:

在使用Hilt提供依赖实例时,代码这么写的:

class HelloTwo
		 @Inject 
		 @JvmOverloads 
		constructor(private val data: String = "data") 

然后编译报错:

Types may only contain one @Inject constructor

问题描述:

反编译了一下,查看最终java的代码:


发现@Inject注释在两个构造函数上了,这样Hilt在依赖构建时,就不知道使用哪个好了。但是怎么改呢?,其实我也不知道,但是我这是这么做的:

解决方案:

我先写了一个段 Java 代码:

public class HelloTwo 

    private String data ;

    @Inject
    public HelloTwo() 
        this("data");
    

    public HelloTwo(String data) 
        this.data = data ;
    



将 @Inject 注释写到了 默认构造函数上,那么使用 java转kotlin功能:

class HelloTwo(private val data: String) 

    @Inject
    constructor() : this("data") 
    

然后就成功了,不得不说,AS也是真心牛叉,这一点都考虑到了。其实也是自己 kotlin知识不足,构造函数没有学会的原因造成的。

以上是关于Hilt 提供依赖实例时,报了Types may only contain one @Inject constructor的主要内容,如果未能解决你的问题,请参考以下文章

Android Hilt依赖注入框架

Android依赖注入框架Hilt基本使用

Android依赖注入框架Hilt基本使用

#yyds干货盘点# JetPack | Hilt-依赖注入框架上手指南

在 Android 中通过 Hilt 进行依赖项注入

从 Dagger 迁移到 Hilt 可带来的收益