gpt4 book ai didi

android - Dagger 单例 vs Kotlin 对象

转载 作者:IT老高 更新时间:2023-10-28 13:40:40 31 4
gpt4 key购买 nike

要定义一个单例,我应该使用 Kotlin 对象声明还是创建一个普通的 Kotlin 类并使用 dagger 注入(inject)它?在我看来,第一种选择肯定更容易,但在这种情况下使用 Dagger 可能是有原因的,我不知道。

选项1(注意object关键字):

object SomeUtil {
// object state (properties)

fun someFunction(number: Long) {
// ...
}
}

选项2(注意class关键字):

class SomeUtil {
// object state (properties)

fun someFunction(number: Long) {
// ...
}
}
@Module
class AppModule {

@Provides
@Singleton
internal fun provideTheUtil() = SomeUtil()
}
class MainActivity : BaseActivity() {

@Inject internal lateinit var util: SomeUtil
}

UPDATE 2019-07-03

@Blackbelt 在评论中说我们应该更喜欢选项 2 的可测试性。但是像 MockK 这样的库可以mock objects也。那么你仍然认为选项 2 是首选吗?

最佳答案

您可能需要重新考虑是否需要将 NumberFormatUtil 设为单例。如果您将 @ReusableDagger 一起使用,甚至直接使用没有任何作用域的工厂,可能会更便宜。

如果 NumberFormatUtil 相当简单并且只提供一些实用方法,没有状态并且不需要在测试中模拟,您可以使用 object 实现,也许使用 @JvmStatic 用于 Java 的互操作性。但是你也可以使用全局实用程序(扩展)函数:

package xyz

fun formatNumber(number: Long) {
// ...
}

fun Long.format() = formatNumber(this)

关于android - Dagger 单例 vs Kotlin 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56276849/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com