Android 什么';s dagger模块上下文中Kotlin对象和类之间的区别

Android 什么';s dagger模块上下文中Kotlin对象和类之间的区别,android,kotlin,dagger-2,dagger,Android,Kotlin,Dagger 2,Dagger,我正在浏览我的一位同事的代码库。我找到了这段代码 @Module object SampleAppModule { @Provides @JvmStatic @AppScope fun provideAppDependency(context: Context): AppDependency = SampleAppDependency(context) } 这让我想,这和这有什么不同 @Module class SampleAppModule { @Pr

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

@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)
}
最近,我在dagger模块中看到了object的使用,但我自己从未使用过它,因为我不明白它的作用。我很想得到一些见解


p、 我试着把对象改成类,结果成功了。现在我真的不知道是否有任何区别。

使用
对象
声明Dagger模块只会创建它的一个实例

如果具有
@提供的
模块被声明为
,而不是
对象
,则在构建组件时会生成一个附加对象。因此,使用
对象
,可以获得更好的性能

另一种方法是使用
伴生对象

除此之外,不要对模块使用
伴生对象
。使用
对象
。在里面 在这种情况下,实例将不被使用,其初始化代码将被删除 被R8移除,方法将是真正静态的,也可以 就像Java一样内联


好的,我们能不能绕过单个实例的部分,把模块变成一个单实例?这里我可能错了。即使模块是
对象
,您也需要一个作用域。它只是带有
class
的模块在构建时比
object
模块生成一个额外的对象。