项目场景:

在使用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知识不足,构造函数没有学会的原因造成的。

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐