簡體   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