阅读文档,我发现可以通过这两种方式使用Hilt:
@Inject lateinit var
仅在您想要注入的类字段上@Inject constructor
我正在尝试找出哪个选项更好。我个人在
@Inject constructor
上发现了一个问题。当我需要将非 Hilt 参数传递给构造函数时,它需要您生成大量样板代码,这只会迫使您增加项目的复杂性。例如:
有这样的课程:
@AndroidEntryPoint
class CustomClass @Inject constructor (val repository: Repository, val name: String) {
假设我只想注入存储库参数,但我想在初始化期间传递名称参数,如下所示:
val customClass = CustomClass("name")
与
@Inject constructor
我被迫添加大量样板和复杂性:
@AndroidEntryPoint
class CustomClass @AssisgtedInject constructor (
val repository: Repository,
@Assisted val name: String
) {
@AssistedFactory
interface CustomClassFactory {
fun create(name: String): CustomClass
}
}
要添加更多样板文件和无用的复杂性,这会迫使您使用
CustomClass
而不是普通的 interface
创建 class
类,并调用 create
方法。
另一方面,如果您使用
@Inject lateinit var
来完成,是不是很简单:
@AndroidEntryPoint
class CustomClass(val name: String) {
@Inject lateinit var repository: Repository
}
现在,认为这是一个超级简单的示例,只有一个非 Hilt 参数,但正如您所知,这可能会变得更大。
那么,如果
@Inject constructor
是更好的选择,为什么几乎每个示例项目都使用 @Inject lateinit var
呢?我在这里失去了什么?
并不是一个比另一个更好。每个都有其优点和缺点。我可以看到使用基于构造函数的方法的一些好处:
var