繁体   English   中英

在匕首模块的上下文中,Kotlin object 和 class 有什么区别

[英]What's the difference between Kotlin object and class in the context of a dagger module

我正在浏览我的一位同事代码库。 我找到了这段代码。

@Module
object SampleAppModule {
    @Provides
    @JvmStatic
    @AppScope
    fun provideAppDependency(context: Context): AppDependency = SampleAppDependency(context)
}

这让我想,这和这有什么不同

@Module
class SampleAppModule {
    @Provides
    @AppScope
    fun provideAppDependency(context: Context): AppDependency = SampleAppDependency(context)
}

我最近在匕首模块中看到了 object 的使用,但我自己从未使用过它,因为我不明白它的作用。 很想得到一些见解。

ps 我尝试将 object 更改为 class,并且成功了。 现在真的不知道有没有区别。

使用object来声明 Dagger 模块只会创建它的一个实例。

如果您的带有@Provides的模块被声明为class而不是object ,那么在构建组件时会生成一个额外的 object 。 因此,使用object可以获得更好的性能。

另一种方法是使用companion object 但这不推荐

除此之外,不要将companion object用于模块。 使用object 在这种情况下,实例将未被使用,其初始化代码将被 R8 删除,方法将真正为 static,也可以像 Java 一样内联。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM