2017-07-03 78 views
17

隨着最近版本的匕首2所做的改進之一是具有靜態提供方法的可能性。簡單如此:kotlin中的匕首2靜態提供者方法

@Provides 
static A providesA() { 
    return A(); 
} 

我想知道如何做一個這樣做在kotlin?我試過

@Module 
class AModule { 
    companion object { 
    @JvmStatic 
    @Provides 
    fun providesA(): A = A() 
    } 
} 

但我得到的錯誤信息:

@Provides methods can only be present within a @Module or @ProducerModule 

我猜有什麼東西與同伴對象怎麼回事,但我是很新的科特林和我」我不確定如何做到這一點。它甚至有可能嗎?

謝謝!

+0

還有一些關於此主題的討論https://www.reddit.com/r/androiddev/comments/75rc85/keeping_the_daggers_sharp_square_corner_blog/do8ktb3/還有第三個選項 - 頂級功能。 – arekolek

回答

10

我現在不能測試,但我認爲這應該工作:

@Module 
object AModule { 
    @JvmStatic 
    @Provides 
    fun providesA(): A = A() 
} 
+0

謝謝!它似乎工作。 – Fred

+0

@Fred,如果能解決你的問題,你能接受這個答案嗎? –

+0

對不起,完全忘了那個 – Fred

18

雖然我覺得zsmb13的解決方案是更好的,我發現了另一個解決方案,它的工作原理

@Module 
class AModule { 
    @Module 
    companion object { 
    @JvmStatic 
    @Provides 
    fun providesA(): A = A() 
    } 

    // add other non-static provides here 
} 

但是,請注意,將有兩個生成的類:AModule_ProvidesAFactoryAModule_Companion_ProvidesAFactory而不是一個AModule_ProvidesAFactory類的情況下與o而不是與同伴對象的課程

+0

實際上,@ zsmb13的解決方案對我來說並不適用,你的做法是。 –

+0

很高興它有幫助然後:D –

+2

這也很好,因爲AModule可以是抽象的 – vlazzle