2017-07-03 64 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