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
模块生成一个额外的对象。